summaryrefslogtreecommitdiff
path: root/gdk/x11
diff options
context:
space:
mode:
authorOwen Taylor <owt1@cornell.edu>1998-03-08 21:47:14 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-03-08 21:47:14 +0000
commitab30a02e5f48d3fb3f8bf152941056d84305ddbe (patch)
tree90c36f53de1d567039152a579f277500a0d5d785 /gdk/x11
parent85f1364922265a19e99c3fca647f884716589446 (diff)
downloadgtk+-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.c34
-rw-r--r--gdk/x11/gdkpixmap-x11.c75
-rw-r--r--gdk/x11/gdkwindow-x11.c9
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