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 /gdk/x11 | |
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.
Diffstat (limited to 'gdk/x11')
-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 |
3 files changed, 92 insertions, 26 deletions
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 |