diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-03-08 21:47:14 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-03-08 21:47:14 +0000 |
commit | ab30a02e5f48d3fb3f8bf152941056d84305ddbe (patch) | |
tree | 90c36f53de1d567039152a579f277500a0d5d785 | |
parent | 85f1364922265a19e99c3fca647f884716589446 (diff) | |
download | gtk+-ab30a02e5f48d3fb3f8bf152941056d84305ddbe.tar.gz |
- Show selection correctly when starting selection with arrows
Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtktext.c:
- Show selection correctly when starting selection with arrows
- Display pixmap background only when not editable
- Redraw focus area more carefully to prevent flashing (and
make style of drawing consistent with Entry)
* gtk/gtktreeitem.c: ref colormaps for pixmap by colormap
storage.
* gtk/gtkrc.c: Store a separate style for each RcStyle for
each colormap, so we can handle background pixmaps
correctly, which need to be per-colormap. (Leaks
colormaps...)
Parse text color style entries correctly.
* gtk/testgtk.c: insert text without fg color
gtk/testgtkrc: move "*" after rest, so the other class styles
take effect
* gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events
safely, in case drop window disappears. (Performance hit
because XSync()'s are necessary)
* gdk/gdk.h gdk/gdkpixmap.c: Added
gdk_pixmap_colormap_create_from_xpm[_d] to allow creating
pixmaps from xpm's before you have a GdkWindow.
-rw-r--r-- | ChangeLog | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 33 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 33 | ||||
-rw-r--r-- | TODO | 12 | ||||
-rw-r--r-- | gdk/gdk.c | 34 | ||||
-rw-r--r-- | gdk/gdk.h | 12 | ||||
-rw-r--r-- | gdk/gdkpixmap.c | 75 | ||||
-rw-r--r-- | gdk/gdkprivate.h | 3 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 9 | ||||
-rw-r--r-- | gdk/x11/gdkmain-x11.c | 34 | ||||
-rw-r--r-- | gdk/x11/gdkpixmap-x11.c | 75 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 9 | ||||
-rw-r--r-- | gtk/gtkrc.c | 159 | ||||
-rw-r--r-- | gtk/gtktext.c | 124 | ||||
-rw-r--r-- | gtk/gtktreeitem.c | 3 | ||||
-rw-r--r-- | gtk/testgtk.c | 4 | ||||
-rw-r--r-- | gtk/testgtkrc | 11 | ||||
-rw-r--r-- | tests/testgtk.c | 4 | ||||
-rw-r--r-- | tests/testgtkrc | 11 |
23 files changed, 660 insertions, 150 deletions
@@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 91a707a6df..521ce19bab 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,36 @@ +Sun Mar 8 15:53:33 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtktext.c: + + - Show selection correctly when starting selection with arrows + + - Display pixmap background only when not editable + + - Redraw focus area more carefully to prevent flashing (and + make style of drawing consistent with Entry) + + * gtk/gtktreeitem.c: ref colormaps for pixmap by colormap + storage. + + * gtk/gtkrc.c: Store a separate style for each RcStyle for + each colormap, so we can handle background pixmaps + correctly, which need to be per-colormap. (Leaks + colormaps...) + + Parse text color style entries correctly. + + * gtk/testgtk.c: insert text without fg color + gtk/testgtkrc: move "*" after rest, so the other class styles + take effect + + * gdk/gdkwindow.c gdk/gdk.c gdk/gdkprivate.h: Send DND events + safely, in case drop window disappears. (Performance hit + because XSync()'s are necessary) + + * gdk/gdk.h gdk/gdkpixmap.c: Added + gdk_pixmap_colormap_create_from_xpm[_d] to allow creating + pixmaps from xpm's before you have a GdkWindow. + Sun Mar 8 12:33:38 PST 1998 Jay Painter <jpaint@serv.net> * gtk/gtkclist.c: the GList clist->selection now contains row indexes @@ -88,6 +88,9 @@ Additions: * Change gtk_widget_propagate_default_style() mechanism to void gtk_rc_string_export (const gchar *rc_additions, gboolean override_rc_styles); + + * Configure events for windows that no longer exist fail in + XTranslateCoordinates TODO AFTER GTK 1.0 ------------------ @@ -220,6 +223,11 @@ TODO AFTER GTK 1.0 - Disable pasting compound text + - When showing background pixmap (not editable) actually set + the background pixmap as the windows bg pixmap, to improve + appearance on exposes. But this would require using another + window to get the origins. + ? Allow moving the separator for paned widgets by dragging it directly instead of using the handle. @@ -243,3 +251,7 @@ TODO AFTER GTK 1.0 gtk_widget_dnd_data_set (should be guchar * with a copy? shouldn't be there at all...) ??? GtkDrawingarea.draw_data + + * gtk_rc_add_[name/class]_style are broken for bg pixmaps, because + styles are broken for bg pixmaps, and RC styles only hack around + that.
\ No newline at end of file @@ -2714,8 +2714,10 @@ gdk_event_translate (GdkEvent *event, replyev.xclient.data.l[2] = replyev.xclient.data.l[3] = 0; replyev.xclient.data.l[4] = reptype; - XSendEvent (gdk_display, replyev.xclient.window, - False, NoEventMask, &replyev); + if (!gdk_send_xevent (replyev.xclient.window, False, + NoEventMask, &replyev)) + GDK_NOTE (DND, g_print("Sending XdeRequest to %#lx failed\n", + replyev.xclient.window)); event->any.type = GDK_DROP_ENTER; event->any.window = window; @@ -3176,7 +3178,9 @@ gdk_dnd_drag_enter (Window dest) } else sev.xclient.data.l[3] = sev.xclient.data.l[4] = None; - XSendEvent (gdk_display, dest, False, NoEventMask, &sev); + if (!gdk_send_xevent (dest, False, NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeEnter to %#lx failed\n", + dest)); } } @@ -3731,7 +3735,9 @@ gdk_dnd_drag_leave (Window dest) { wp = (GdkWindowPrivate *) gdk_dnd.drag_startwindows[i]; sev.xclient.data.l[0] = wp->xwindow; - XSendEvent(gdk_display, dest, False, NoEventMask, &sev); + if (!gdk_send_xevent (dest, False, NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeLeave to %#lx failed\n", + dest)); wp->dnd_drag_accepted = 0; } } @@ -3990,7 +3996,9 @@ gdk_event_send_clientmessage_toall(GdkEvent *event) for(i = 0; i < ret_nchildren; i++) { curwin = gdk_get_client_window(gdk_display, ret_children[i]); sev.xclient.window = curwin; - XSendEvent(gdk_display, curwin, False, NoEventMask, &sev); + if (!gdk_send_xevent (curwin, False, NoEventMask, &sev)) + GDK_NOTE (MISC, g_print("Sending client message %ld to %#lx failed\n", + event->client.message_type, curwin)); } XFree(ret_children); @@ -4001,3 +4009,19 @@ gdk_get_display(void) { return (gchar *)XDisplayName (gdk_display_name); } + +gint +gdk_send_xevent (Window window, gboolean propagate, glong event_mask, + XEvent *event_send) +{ + Status result; + + gdk_error_code = 0; + + gdk_error_warnings = 0; + result = XSendEvent (gdk_display, window, propagate, event_mask, event_send); + XSync (gdk_display, False); + gdk_error_warnings = 1; + + return result && (gdk_error_code != -1); +} @@ -382,10 +382,22 @@ GdkPixmap* gdk_pixmap_create_from_xpm (GdkWindow *window, GdkBitmap **mask, GdkColor *transparent_color, const gchar *filename); +GdkPixmap* gdk_pixmap_colormap_create_from_xpm + (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename); GdkPixmap* gdk_pixmap_create_from_xpm_d (GdkWindow *window, GdkBitmap **mask, GdkColor *transparent_color, gchar **data); +GdkPixmap* gdk_pixmap_colormap_create_from_xpm_d + (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data); GdkPixmap *gdk_pixmap_ref (GdkPixmap *pixmap); void gdk_pixmap_unref (GdkPixmap *pixmap); diff --git a/gdk/gdkpixmap.c b/gdk/gdkpixmap.c index 81adacc41a..6fbdada880 100644 --- a/gdk/gdkpixmap.c +++ b/gdk/gdkpixmap.c @@ -351,15 +351,15 @@ gdk_pixmap_extract_color (gchar *buffer) GdkPixmap* -gdk_pixmap_create_from_xpm (GdkWindow *window, - GdkBitmap **mask, - GdkColor *transparent_color, - const gchar *filename) +gdk_pixmap_colormap_create_from_xpm (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename) { FILE *infile = NULL; GdkPixmap *pixmap = NULL; GdkImage *image = NULL; - GdkColormap *colormap; GdkVisual *visual; GdkGC *gc; GdkColor tmp_color; @@ -369,7 +369,19 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, _GdkPixmapColor *colors = NULL, *color = NULL; gulong index; - g_return_val_if_fail (window != NULL, NULL); + if ((window == NULL) && (colormap == NULL)) + g_warning ("Creating pixmap from xpm with NULL window and colormap"); + + if (window == NULL) + window = (GdkWindow *)&gdk_root_parent; + + if (colormap == NULL) + { + colormap = gdk_window_get_colormap (window); + visual = gdk_window_get_visual (window); + } + else + visual = ((GdkColormapPrivate *)colormap)->visual; infile = fopen (filename, "rb"); if (infile != NULL) @@ -386,9 +398,6 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, colors = g_new(_GdkPixmapColor, num_cols); - colormap = gdk_window_get_colormap (window); - visual = gdk_window_get_visual (window); - if (transparent_color == NULL) { gdk_color_white (colormap, &tmp_color); @@ -514,14 +523,25 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, } GdkPixmap* -gdk_pixmap_create_from_xpm_d (GdkWindow *window, - GdkBitmap **mask, - GdkColor *transparent_color, - gchar **data) +gdk_pixmap_create_from_xpm (GdkWindow *window, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename) +{ + return gdk_pixmap_colormap_create_from_xpm (window, NULL, mask, + transparent_color, filename); +} + + +GdkPixmap* +gdk_pixmap_colormap_create_from_xpm_d (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data) { GdkPixmap *pixmap = NULL; GdkImage *image = NULL; - GdkColormap *colormap; GdkVisual *visual; GdkGC *gc; GdkColor tmp_color; @@ -530,7 +550,19 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, _GdkPixmapColor *colors = NULL, *color = NULL; gulong index; - g_return_val_if_fail (window != NULL, NULL); + if ((window == NULL) && (colormap == NULL)) + g_warning ("Creating pixmap from xpm with NULL window and colormap"); + + if (window == NULL) + window = (GdkWindow *)&gdk_root_parent; + + if (colormap == NULL) + { + colormap = gdk_window_get_colormap (window); + visual = gdk_window_get_visual (window); + } + else + visual = ((GdkColormapPrivate *)colormap)->visual; i = 0; buffer = data[i++]; @@ -538,9 +570,6 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, colors = g_new(_GdkPixmapColor, num_cols); - colormap = gdk_window_get_colormap (window); - visual = gdk_window_get_visual (window); - if (transparent_color == NULL) { gdk_color_white (colormap, &tmp_color); @@ -658,6 +687,16 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, } GdkPixmap* +gdk_pixmap_create_from_xpm_d (GdkWindow *window, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data) +{ + return gdk_pixmap_colormap_create_from_xpm_d (window, NULL, mask, + transparent_color, data); +} + +GdkPixmap* gdk_pixmap_ref (GdkPixmap *pixmap) { GdkWindowPrivate *private = (GdkWindowPrivate *)pixmap; diff --git a/gdk/gdkprivate.h b/gdk/gdkprivate.h index 6ca8f92e20..0d0054b45e 100644 --- a/gdk/gdkprivate.h +++ b/gdk/gdkprivate.h @@ -223,6 +223,9 @@ void gdk_xid_table_insert (XID *xid, void gdk_xid_table_remove (XID xid); gpointer gdk_xid_table_lookup (XID xid); +gint gdk_send_xevent (Window window, gboolean propagate, glong event_mask, + XEvent *event_send); + /* If you pass x = y = -1, it queries the pointer to find out where it currently is. If you pass x = y = -2, it does anything necessary diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 26a9394344..5a1524470b 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1551,9 +1551,12 @@ gdk_window_dnd_data_set (GdkWindow *window, sev.xclient.data.l[3] = 0; sev.xclient.data.l[4] = 0; - - XSendEvent (gdk_display, event->dragrequest.requestor, False, - NoEventMask, &sev); + + if (!gdk_send_xevent (event->dragrequest.requestor, False, + NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeDataAvailable to %#x failed\n", + event->dragrequest.requestor)); + } void diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c index a118f6ee97..0d69a33ea7 100644 --- a/gdk/x11/gdkmain-x11.c +++ b/gdk/x11/gdkmain-x11.c @@ -2714,8 +2714,10 @@ gdk_event_translate (GdkEvent *event, replyev.xclient.data.l[2] = replyev.xclient.data.l[3] = 0; replyev.xclient.data.l[4] = reptype; - XSendEvent (gdk_display, replyev.xclient.window, - False, NoEventMask, &replyev); + if (!gdk_send_xevent (replyev.xclient.window, False, + NoEventMask, &replyev)) + GDK_NOTE (DND, g_print("Sending XdeRequest to %#lx failed\n", + replyev.xclient.window)); event->any.type = GDK_DROP_ENTER; event->any.window = window; @@ -3176,7 +3178,9 @@ gdk_dnd_drag_enter (Window dest) } else sev.xclient.data.l[3] = sev.xclient.data.l[4] = None; - XSendEvent (gdk_display, dest, False, NoEventMask, &sev); + if (!gdk_send_xevent (dest, False, NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeEnter to %#lx failed\n", + dest)); } } @@ -3731,7 +3735,9 @@ gdk_dnd_drag_leave (Window dest) { wp = (GdkWindowPrivate *) gdk_dnd.drag_startwindows[i]; sev.xclient.data.l[0] = wp->xwindow; - XSendEvent(gdk_display, dest, False, NoEventMask, &sev); + if (!gdk_send_xevent (dest, False, NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeLeave to %#lx failed\n", + dest)); wp->dnd_drag_accepted = 0; } } @@ -3990,7 +3996,9 @@ gdk_event_send_clientmessage_toall(GdkEvent *event) for(i = 0; i < ret_nchildren; i++) { curwin = gdk_get_client_window(gdk_display, ret_children[i]); sev.xclient.window = curwin; - XSendEvent(gdk_display, curwin, False, NoEventMask, &sev); + if (!gdk_send_xevent (curwin, False, NoEventMask, &sev)) + GDK_NOTE (MISC, g_print("Sending client message %ld to %#lx failed\n", + event->client.message_type, curwin)); } XFree(ret_children); @@ -4001,3 +4009,19 @@ gdk_get_display(void) { return (gchar *)XDisplayName (gdk_display_name); } + +gint +gdk_send_xevent (Window window, gboolean propagate, glong event_mask, + XEvent *event_send) +{ + Status result; + + gdk_error_code = 0; + + gdk_error_warnings = 0; + result = XSendEvent (gdk_display, window, propagate, event_mask, event_send); + XSync (gdk_display, False); + gdk_error_warnings = 1; + + return result && (gdk_error_code != -1); +} diff --git a/gdk/x11/gdkpixmap-x11.c b/gdk/x11/gdkpixmap-x11.c index 81adacc41a..6fbdada880 100644 --- a/gdk/x11/gdkpixmap-x11.c +++ b/gdk/x11/gdkpixmap-x11.c @@ -351,15 +351,15 @@ gdk_pixmap_extract_color (gchar *buffer) GdkPixmap* -gdk_pixmap_create_from_xpm (GdkWindow *window, - GdkBitmap **mask, - GdkColor *transparent_color, - const gchar *filename) +gdk_pixmap_colormap_create_from_xpm (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename) { FILE *infile = NULL; GdkPixmap *pixmap = NULL; GdkImage *image = NULL; - GdkColormap *colormap; GdkVisual *visual; GdkGC *gc; GdkColor tmp_color; @@ -369,7 +369,19 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, _GdkPixmapColor *colors = NULL, *color = NULL; gulong index; - g_return_val_if_fail (window != NULL, NULL); + if ((window == NULL) && (colormap == NULL)) + g_warning ("Creating pixmap from xpm with NULL window and colormap"); + + if (window == NULL) + window = (GdkWindow *)&gdk_root_parent; + + if (colormap == NULL) + { + colormap = gdk_window_get_colormap (window); + visual = gdk_window_get_visual (window); + } + else + visual = ((GdkColormapPrivate *)colormap)->visual; infile = fopen (filename, "rb"); if (infile != NULL) @@ -386,9 +398,6 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, colors = g_new(_GdkPixmapColor, num_cols); - colormap = gdk_window_get_colormap (window); - visual = gdk_window_get_visual (window); - if (transparent_color == NULL) { gdk_color_white (colormap, &tmp_color); @@ -514,14 +523,25 @@ gdk_pixmap_create_from_xpm (GdkWindow *window, } GdkPixmap* -gdk_pixmap_create_from_xpm_d (GdkWindow *window, - GdkBitmap **mask, - GdkColor *transparent_color, - gchar **data) +gdk_pixmap_create_from_xpm (GdkWindow *window, + GdkBitmap **mask, + GdkColor *transparent_color, + const gchar *filename) +{ + return gdk_pixmap_colormap_create_from_xpm (window, NULL, mask, + transparent_color, filename); +} + + +GdkPixmap* +gdk_pixmap_colormap_create_from_xpm_d (GdkWindow *window, + GdkColormap *colormap, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data) { GdkPixmap *pixmap = NULL; GdkImage *image = NULL; - GdkColormap *colormap; GdkVisual *visual; GdkGC *gc; GdkColor tmp_color; @@ -530,7 +550,19 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, _GdkPixmapColor *colors = NULL, *color = NULL; gulong index; - g_return_val_if_fail (window != NULL, NULL); + if ((window == NULL) && (colormap == NULL)) + g_warning ("Creating pixmap from xpm with NULL window and colormap"); + + if (window == NULL) + window = (GdkWindow *)&gdk_root_parent; + + if (colormap == NULL) + { + colormap = gdk_window_get_colormap (window); + visual = gdk_window_get_visual (window); + } + else + visual = ((GdkColormapPrivate *)colormap)->visual; i = 0; buffer = data[i++]; @@ -538,9 +570,6 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, colors = g_new(_GdkPixmapColor, num_cols); - colormap = gdk_window_get_colormap (window); - visual = gdk_window_get_visual (window); - if (transparent_color == NULL) { gdk_color_white (colormap, &tmp_color); @@ -658,6 +687,16 @@ gdk_pixmap_create_from_xpm_d (GdkWindow *window, } GdkPixmap* +gdk_pixmap_create_from_xpm_d (GdkWindow *window, + GdkBitmap **mask, + GdkColor *transparent_color, + gchar **data) +{ + return gdk_pixmap_colormap_create_from_xpm_d (window, NULL, mask, + transparent_color, data); +} + +GdkPixmap* gdk_pixmap_ref (GdkPixmap *pixmap) { GdkWindowPrivate *private = (GdkWindowPrivate *)pixmap; diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 26a9394344..5a1524470b 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -1551,9 +1551,12 @@ gdk_window_dnd_data_set (GdkWindow *window, sev.xclient.data.l[3] = 0; sev.xclient.data.l[4] = 0; - - XSendEvent (gdk_display, event->dragrequest.requestor, False, - NoEventMask, &sev); + + if (!gdk_send_xevent (event->dragrequest.requestor, False, + NoEventMask, &sev)) + GDK_NOTE (DND, g_print("Sending XdeDataAvailable to %#x failed\n", + event->dragrequest.requestor)); + } void diff --git a/gtk/gtkrc.c b/gtk/gtkrc.c index f3aef39b02..d09201e39d 100644 --- a/gtk/gtkrc.c +++ b/gtk/gtkrc.c @@ -60,15 +60,22 @@ enum { typedef struct _GtkRcStyle GtkRcStyle; typedef struct _GtkRcSet GtkRcSet; +typedef struct _GtkRcNode GtkRcNode; + +struct _GtkRcNode +{ + GdkColormap *cmap; + GtkStyle *style; +}; struct _GtkRcStyle { - int initialize; char *name; char *font_name; char *fontset_name; char *bg_pixmap_name[5]; - GtkStyle *style; + GtkStyle *proto_style; + GList *styles; }; struct _GtkRcSet @@ -86,7 +93,8 @@ static GtkRcStyle* gtk_rc_styles_match (GSList *sets, const char *path); static gint gtk_rc_style_match (const char *set, const char *path); -static void gtk_rc_style_init (GtkRcStyle *rc_style); +static GtkStyle* gtk_rc_style_init (GtkRcStyle *rc_style, + GdkColormap *cmap); static void gtk_rc_parse_any (const gchar *input_name, gint input_fd, const gchar *input_string); @@ -100,6 +108,8 @@ static gint gtk_rc_parse_bg (GScanner *scanner, GtkStyle *style); static gint gtk_rc_parse_fg (GScanner *scanner, GtkStyle *style); +static gint gtk_rc_parse_text (GScanner *scanner, + GtkStyle *style); static gint gtk_rc_parse_bg_pixmap (GScanner *scanner, GtkRcStyle *rc_style); static gint gtk_rc_parse_font (GScanner *scanner, @@ -244,8 +254,8 @@ gtk_rc_get_style (GtkWidget *widget) if (rc_style) { - gtk_rc_style_init (rc_style); - return rc_style->style; + return gtk_rc_style_init (rc_style, + gtk_widget_get_colormap (widget)); } } } @@ -260,8 +270,8 @@ gtk_rc_get_style (GtkWidget *widget) if (rc_style) { - gtk_rc_style_init (rc_style); - return rc_style->style; + return gtk_rc_style_init (rc_style, + gtk_widget_get_colormap (widget)); } } } @@ -280,7 +290,6 @@ gtk_rc_add_widget_name_style (GtkStyle *style, gtk_style_ref (style); rc_style = g_new (GtkRcStyle, 1); - rc_style->initialize = FALSE; rc_style->name = NULL; rc_style->font_name = NULL; rc_style->fontset_name = NULL; @@ -288,7 +297,7 @@ gtk_rc_add_widget_name_style (GtkStyle *style, for (i = 0; i < 5; i++) rc_style->bg_pixmap_name[i] = NULL; - rc_style->style = style; + rc_style->styles = g_list_append (NULL, style); rc_set = g_new (GtkRcSet, 1); rc_set->set = g_strdup (pattern); @@ -308,7 +317,6 @@ gtk_rc_add_widget_class_style (GtkStyle *style, gtk_style_ref (style); rc_style = g_new (GtkRcStyle, 1); - rc_style->initialize = FALSE; rc_style->name = NULL; rc_style->font_name = NULL; rc_style->fontset_name = NULL; @@ -316,7 +324,7 @@ gtk_rc_add_widget_class_style (GtkStyle *style, for (i = 0; i < 5; i++) rc_style->bg_pixmap_name[i] = NULL; - rc_style->style = style; + rc_style->styles = g_list_append (NULL, style); rc_set = g_new (GtkRcSet, 1); rc_set->set = g_strdup (pattern); @@ -471,46 +479,72 @@ gtk_rc_style_match (const char *set, return TRUE; } -static void -gtk_rc_style_init (GtkRcStyle *rc_style) +static GtkStyle * +gtk_rc_style_init (GtkRcStyle *rc_style, GdkColormap *cmap) { GdkFont *old_font; gint i; + + GList *tmp_list; + GtkStyle *style = NULL; + + tmp_list = rc_style->styles; + + while (tmp_list) + { + GtkRcNode *node = (GtkRcNode *)tmp_list->data; + + if (node->cmap == cmap) + style = node->style; + + tmp_list = tmp_list->next; + } - if (rc_style->initialize) + if (!style) { - rc_style->initialize = FALSE; + style = gtk_style_copy (rc_style->proto_style); if (rc_style->fontset_name) { - old_font = rc_style->style->font; - rc_style->style->font = gdk_fontset_load (rc_style->fontset_name); - if (rc_style->style->font) + old_font = style->font; + style->font = gdk_fontset_load (rc_style->fontset_name); + if (style->font) gdk_font_unref (old_font); else - rc_style->style->font = old_font; + style->font = old_font; } else if (rc_style->font_name) { - old_font = rc_style->style->font; - rc_style->style->font = gdk_font_load (rc_style->font_name); - if (rc_style->style->font) + old_font = style->font; + style->font = gdk_font_load (rc_style->font_name); + if (style->font) gdk_font_unref (old_font); else - rc_style->style->font = old_font; + style->font = old_font; } for (i = 0; i < 5; i++) if (rc_style->bg_pixmap_name[i]) { if (strcmp (rc_style->bg_pixmap_name[i], "<parent>") == 0) - rc_style->style->bg_pixmap[i] = (GdkPixmap*) GDK_PARENT_RELATIVE; + style->bg_pixmap[i] = (GdkPixmap*) GDK_PARENT_RELATIVE; else - rc_style->style->bg_pixmap[i] = gdk_pixmap_create_from_xpm (NULL, NULL, - &rc_style->style->bg[i], - rc_style->bg_pixmap_name[i]); + style->bg_pixmap[i] = + gdk_pixmap_colormap_create_from_xpm (NULL, cmap, + NULL, + &style->bg[i], + rc_style->bg_pixmap_name[i]); } + + rc_style->styles = g_list_append (rc_style->styles, style); + + /* FIXME, this leaks colormaps, but if we don't do this, then we'll + * be screwed, because we identify colormaps by address equality + */ + gdk_colormap_ref (cmap); } + + return style; } static gint @@ -571,16 +605,15 @@ gtk_rc_parse_style (GScanner *scanner) { insert = TRUE; rc_style = g_new (GtkRcStyle, 1); - rc_style->initialize = TRUE; rc_style->name = g_strdup (scanner->value.v_string); rc_style->font_name = NULL; rc_style->fontset_name = NULL; for (i = 0; i < 5; i++) rc_style->bg_pixmap_name[i] = NULL; - - rc_style->style = gtk_style_new (); - gtk_style_ref (rc_style->style); + + rc_style->proto_style = gtk_style_new(); + rc_style->styles = NULL; } token = g_scanner_peek_next_token (scanner); @@ -593,7 +626,7 @@ gtk_rc_parse_style (GScanner *scanner) { if (insert) { - gtk_style_unref (rc_style->style); + gtk_style_unref (rc_style->proto_style); g_free (rc_style); } return PARSE_ERROR; @@ -604,17 +637,17 @@ gtk_rc_parse_style (GScanner *scanner) { for (i = 0; i < 5; i++) { - rc_style->style->fg[i] = parent_style->style->fg[i]; - rc_style->style->bg[i] = parent_style->style->bg[i]; - rc_style->style->light[i] = parent_style->style->light[i]; - rc_style->style->dark[i] = parent_style->style->dark[i]; - rc_style->style->mid[i] = parent_style->style->mid[i]; - rc_style->style->text[i] = parent_style->style->text[i]; - rc_style->style->base[i] = parent_style->style->base[i]; + rc_style->proto_style->fg[i] = parent_style->proto_style->fg[i]; + rc_style->proto_style->bg[i] = parent_style->proto_style->bg[i]; + rc_style->proto_style->light[i] = parent_style->proto_style->light[i]; + rc_style->proto_style->dark[i] = parent_style->proto_style->dark[i]; + rc_style->proto_style->mid[i] = parent_style->proto_style->mid[i]; + rc_style->proto_style->text[i] = parent_style->proto_style->text[i]; + rc_style->proto_style->base[i] = parent_style->proto_style->base[i]; } - rc_style->style->black = parent_style->style->black; - rc_style->style->white = parent_style->style->white; + rc_style->proto_style->black = parent_style->proto_style->black; + rc_style->proto_style->white = parent_style->proto_style->white; if (rc_style->fontset_name) { @@ -641,7 +674,7 @@ gtk_rc_parse_style (GScanner *scanner) { if (insert) { - gtk_style_unref (rc_style->style); + gtk_style_unref (rc_style->proto_style); g_free (rc_style); } return PARSE_ERROR; @@ -656,7 +689,7 @@ gtk_rc_parse_style (GScanner *scanner) { if (insert) { - gtk_style_unref (rc_style->style); + gtk_style_unref (rc_style->proto_style); g_free (rc_style); } return error; @@ -677,7 +710,7 @@ gtk_rc_parse_style (GScanner *scanner) if (rc_style->bg_pixmap_name[i]) g_free (rc_style->bg_pixmap_name[i]); - gtk_style_unref (rc_style->style); + gtk_style_unref (rc_style->proto_style); g_free (rc_style); } return PARSE_ERROR; @@ -700,15 +733,19 @@ gtk_rc_parse_style_option (GScanner *scanner, if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) return PARSE_ERROR; - error = gtk_rc_parse_base (scanner, rc_style->style); + error = gtk_rc_parse_base (scanner, rc_style->proto_style); + if (error != PARSE_SYNTAX) + return error; + + error = gtk_rc_parse_bg (scanner, rc_style->proto_style); if (error != PARSE_SYNTAX) return error; - error = gtk_rc_parse_bg (scanner, rc_style->style); + error = gtk_rc_parse_fg (scanner, rc_style->proto_style); if (error != PARSE_SYNTAX) return error; - error = gtk_rc_parse_fg (scanner, rc_style->style); + error = gtk_rc_parse_text (scanner, rc_style->proto_style); if (error != PARSE_SYNTAX) return error; @@ -810,6 +847,34 @@ gtk_rc_parse_fg (GScanner *scanner, } static gint +gtk_rc_parse_text (GScanner *scanner, + GtkStyle *style) +{ + GtkStateType state; + gint token; + gint error; + + token = g_scanner_peek_next_token (scanner); + if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) + return PARSE_ERROR; + if (token != TOKEN_TEXT) + return PARSE_SYNTAX; + token = g_scanner_get_next_token (scanner); + + error = gtk_rc_parse_state (scanner, &state); + if (error != PARSE_OK) + return error; + + token = g_scanner_get_next_token (scanner); + if (token != G_TOKEN_EQUAL_SIGN) + return PARSE_ERROR; + + error = gtk_rc_parse_color (scanner, &style->text[state]); + + return error; +} + +static gint gtk_rc_parse_bg_pixmap (GScanner *scanner, GtkRcStyle *rc_style) { diff --git a/gtk/gtktext.c b/gtk/gtktext.c index edb56c39b1..705412bc3e 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -35,7 +35,7 @@ #define LINE_DELIM '\n' #define MIN_TEXT_WIDTH_LINES 20 #define MIN_TEXT_HEIGHT_LINES 10 -#define TEXT_BORDER_ROOM 3 +#define TEXT_BORDER_ROOM 1 #define LINE_WRAP_ROOM 8 /* The bitmaps are 6 wide. */ #define DEFAULT_TAB_STOP_WIDTH 4 #define SCROLL_PIXELS 5 @@ -513,15 +513,25 @@ void gtk_text_set_editable (GtkText *text, gint editable) { + GtkWidget *widget; + g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); + widget = GTK_WIDGET (text); GTK_EDITABLE(text)->editable = (editable != FALSE); if (editable) draw_cursor (text, TRUE); else undraw_cursor (text, TRUE); + + if (GTK_WIDGET_DRAWABLE (widget) && + widget->style->bg_pixmap[GTK_STATE_NORMAL]) + { + gdk_window_clear (widget->window); /* just the border */ + gtk_widget_queue_draw (widget); + } } void @@ -895,12 +905,9 @@ gtk_text_realize (GtkWidget *widget) widget->style = gtk_style_attach (widget->style, widget->window); - /* Can't call gtk_style_set_background here because its handled specially */ - if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) - gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]); - - if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) - gdk_window_set_background (text->text_area, &widget->style->base[GTK_STATE_NORMAL]); + /* Can't call gtk_style_set_background here because it's handled specially */ + gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]); + gdk_window_set_background (text->text_area, &widget->style->base[GTK_STATE_NORMAL]); text->line_wrap_bitmap = gdk_bitmap_create_from_data (text->text_area, (gchar*) line_wrap_bits, @@ -1059,6 +1066,8 @@ clear_focus_area (GtkText *text, gint area_x, gint area_y, gint area_width, gint } } + + static void gtk_text_draw_focus (GtkWidget *widget) { @@ -1073,6 +1082,11 @@ gtk_text_draw_focus (GtkWidget *widget) if (GTK_WIDGET_DRAWABLE (widget)) { + gint ythick = widget->style->klass->ythickness; + gint xthick = widget->style->klass->xthickness; + gint xextra = TEXT_BORDER_ROOM; + gint yextra = TEXT_BORDER_ROOM; + TDEBUG (("in gtk_text_draw_focus\n")); x = 0; @@ -1080,27 +1094,14 @@ gtk_text_draw_focus (GtkWidget *widget) width = widget->allocation.width; height = widget->allocation.height; - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - gint ythick = TEXT_BORDER_ROOM + widget->style->klass->ythickness; - gint xthick = TEXT_BORDER_ROOM + widget->style->klass->xthickness; - - /* top rect */ - clear_focus_area (text, 0, 0, width, ythick); - /* right rect */ - clear_focus_area (text, 0, ythick, xthick, height - 2 * ythick); - /* left rect */ - clear_focus_area (text, width - xthick, ythick, xthick, height - 2 * ythick); - /* bottom rect */ - clear_focus_area (text, 0, height - ythick, width, ythick); - } - if (GTK_WIDGET_HAS_FOCUS (widget)) { x += 1; y += 1; width -= 2; height -= 2; + xextra -= 1; + yextra -= 1; gdk_draw_rectangle (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], @@ -1108,19 +1109,38 @@ gtk_text_draw_focus (GtkWidget *widget) widget->allocation.width - 1, widget->allocation.height - 1); } - else - { - gdk_draw_rectangle (widget->window, - widget->style->white_gc, FALSE, - x + 2, - y + 2, - width - 1 - 2, - height - 1 - 2); - } gtk_draw_shadow (widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, x, y, width, height); + + x += xthick; + y += ythick; + width -= 2 * xthick; + height -= 2 * ythick; + + if (widget->style->bg_pixmap[GTK_STATE_NORMAL] && + !GTK_EDITABLE (text)->editable) + { + /* top rect */ + clear_focus_area (text, x, y, width, yextra); + /* left rect */ + clear_focus_area (text, x, y + yextra, + xextra, y + height - 2 * yextra); + /* right rect */ + clear_focus_area (text, x + width - xextra, y + yextra, + xextra, height - 2 * ythick); + /* bottom rect */ + clear_focus_area (text, x, x + height - yextra, width, yextra); + } + else if (!GTK_WIDGET_HAS_FOCUS (widget)) + { + gdk_draw_rectangle (widget->window, + widget->style->base_gc[GTK_STATE_NORMAL], FALSE, + x, y, + width - 1, + height - 1); + } } else { @@ -1559,6 +1579,8 @@ gtk_text_key_press (GtkWidget *widget, if (extend_selection) { + editable->has_selection = TRUE; + if (editable->selection_start_pos == editable->selection_end_pos) { editable->selection_start_pos = text->point.index; @@ -3746,7 +3768,9 @@ mark_bg_gc (GtkText* text, const GtkPropertyMark *mark) else return GTK_WIDGET(text)->style->bg_gc[GTK_STATE_ACTIVE]; } - else if (MARK_CURRENT_BACK (mark)) + else if (!gdk_color_equal(MARK_CURRENT_BACK (mark), + >K_WIDGET(text)->style->base[GTK_STATE_NORMAL])) + { gdk_gc_set_foreground (text->gc, MARK_CURRENT_BACK (mark)); return text->gc; @@ -3810,6 +3834,18 @@ draw_line (GtkText* text, pixel_start_height, running_offset, LINE_HEIGHT (*lp)); + else if (!editable->editable && + GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]) + { + GdkRectangle rect; + + rect.x = 0; + rect.y = pixel_start_height; + rect.width = running_offset; + rect.height = LINE_HEIGHT (*lp); + + clear_area (text, &rect); + } } for (; chars > 0; chars -= len, buffer += len, len = 0) @@ -3850,6 +3886,18 @@ draw_line (GtkText* text, pixel_start_height, pixel_width, LINE_HEIGHT(*lp)); + else if (!editable->editable && + GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]) + { + GdkRectangle rect; + + rect.x = running_offset; + rect.y = pixel_start_height; + rect.width = pixel_width; + rect.height = LINE_HEIGHT (*lp); + + clear_area (text, &rect); + } if ((mark.index >= selection_start_pos) && (mark.index < selection_end_pos)) @@ -3983,7 +4031,8 @@ undraw_cursor (GtkText* text, gint absolute) font = MARK_CURRENT_FONT(&text->cursor_mark); - if (GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]) + if (GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL] && + !editable->editable) { GdkRectangle rect; @@ -3996,11 +4045,7 @@ undraw_cursor (GtkText* text, gint absolute) } else { - if (MARK_CURRENT_BACK (&text->cursor_mark)) - gdk_gc_set_foreground (text->gc, MARK_CURRENT_BACK (&text->cursor_mark)); - else - gdk_gc_set_foreground (text->gc, >K_WIDGET (text)->style->base[GTK_STATE_NORMAL]); - + gdk_gc_set_foreground (text->gc, MARK_CURRENT_BACK (&text->cursor_mark)); gdk_draw_line (text->text_area, text->gc, text->cursor_pos_x, text->cursor_pos_y - text->cursor_char_offset, text->cursor_pos_x, text->cursor_pos_y - text->cursor_char_offset - font->ascent); @@ -4093,7 +4138,8 @@ clear_area (GtkText *text, GdkRectangle *area) { GtkWidget *widget = GTK_WIDGET (text); - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) + if (widget->style->bg_pixmap[GTK_STATE_NORMAL] && + !GTK_EDITABLE(text)->editable) { gint width, height; gint x = area->x, y = area->y; diff --git a/gtk/gtktreeitem.c b/gtk/gtktreeitem.c index ed607780d3..328d52d141 100644 --- a/gtk/gtktreeitem.c +++ b/gtk/gtktreeitem.c @@ -388,6 +388,8 @@ gtk_tree_item_add_pixmaps (GtkTreeItem *tree_item) pixmap_node = g_new (GtkTreePixmaps, 1); pixmap_node->colormap = colormap; + gdk_colormap_ref (colormap); + pixmap_node->refcount = 1; /* create pixmaps for plus icon */ @@ -424,6 +426,7 @@ gtk_tree_item_remove_pixmaps (GtkTreeItem *tree_item) if (--pixmap_node->refcount == 0) { + gdk_colormap_unref (pixmap_node->colormap); gdk_pixmap_unref (pixmap_node->pixmap_plus); gdk_bitmap_unref (pixmap_node->mask_plus); gdk_pixmap_unref (pixmap_node->pixmap_minus); diff --git a/gtk/testgtk.c b/gtk/testgtk.c index 90e69b7315..9ceb305a6d 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -2949,6 +2949,8 @@ create_clist () GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_clist_set_column_justification (GTK_CLIST (clist), 1, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER); @@ -3476,7 +3478,7 @@ create_text () while (1) { nchars = fread(buffer, 1, 1024, infile); - gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, + gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, buffer, nchars); if (nchars < 1024) diff --git a/gtk/testgtkrc b/gtk/testgtkrc index 6d61ecbd76..566c663831 100644 --- a/gtk/testgtkrc +++ b/gtk/testgtkrc @@ -13,7 +13,7 @@ pixmap_path "." style "default" { fontset = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*" -# base[NORMAL] = { 1.0, 0.8, 0.8 } +# base[NORMAL] = { 0.8, 0.8, 1.0 } } style "window" @@ -48,8 +48,9 @@ style "toggle_button" = "button" style "text" { -# bg_pixmap[NORMAL] = "marble.xpm" -# fg[NORMAL] = { 1.0, 1.0, 1.0 } + bg_pixmap[NORMAL] = "marble.xpm" + text[NORMAL] = { 1.0, 1.0, 1.0 } + base[NORMAL] = { 0.0, 0.0, 0.0 } } style "ruler" @@ -62,7 +63,6 @@ style "curve" fg[NORMAL] = { 58000, 0, 0 } # red } -widget_class "*" style "default" widget_class "GtkWindow" style "window" widget_class "GtkDialog" style "window" widget_class "GtkFileSelection" style "window" @@ -71,6 +71,7 @@ widget_class "*GtkCheckButton*" style "toggle_button" widget_class "*GtkRadioButton*" style "toggle_button" widget_class "*GtkButton*" style "button" widget_class "*Ruler" style "ruler" -#widget_class "*GtkText" style "text" +widget_class "*GtkText" style "text" +widget_class "*" style "default" widget "main window.*GtkButton*" style "main_button" widget "*GtkCurve" style "curve" diff --git a/tests/testgtk.c b/tests/testgtk.c index 90e69b7315..9ceb305a6d 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -2949,6 +2949,8 @@ create_clist () GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_clist_set_column_justification (GTK_CLIST (clist), 1, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER); @@ -3476,7 +3478,7 @@ create_text () while (1) { nchars = fread(buffer, 1, 1024, infile); - gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, + gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, buffer, nchars); if (nchars < 1024) diff --git a/tests/testgtkrc b/tests/testgtkrc index 6d61ecbd76..566c663831 100644 --- a/tests/testgtkrc +++ b/tests/testgtkrc @@ -13,7 +13,7 @@ pixmap_path "." style "default" { fontset = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*" -# base[NORMAL] = { 1.0, 0.8, 0.8 } +# base[NORMAL] = { 0.8, 0.8, 1.0 } } style "window" @@ -48,8 +48,9 @@ style "toggle_button" = "button" style "text" { -# bg_pixmap[NORMAL] = "marble.xpm" -# fg[NORMAL] = { 1.0, 1.0, 1.0 } + bg_pixmap[NORMAL] = "marble.xpm" + text[NORMAL] = { 1.0, 1.0, 1.0 } + base[NORMAL] = { 0.0, 0.0, 0.0 } } style "ruler" @@ -62,7 +63,6 @@ style "curve" fg[NORMAL] = { 58000, 0, 0 } # red } -widget_class "*" style "default" widget_class "GtkWindow" style "window" widget_class "GtkDialog" style "window" widget_class "GtkFileSelection" style "window" @@ -71,6 +71,7 @@ widget_class "*GtkCheckButton*" style "toggle_button" widget_class "*GtkRadioButton*" style "toggle_button" widget_class "*GtkButton*" style "button" widget_class "*Ruler" style "ruler" -#widget_class "*GtkText" style "text" +widget_class "*GtkText" style "text" +widget_class "*" style "default" widget "main window.*GtkButton*" style "main_button" widget "*GtkCurve" style "curve" |