diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-02-03 20:57:40 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-02-03 20:57:40 +0000 |
commit | 3b0de24a7b2a2786c1c3b8ff3fbda1168e8909df (patch) | |
tree | 8ce17a81bf09eea9e69538eb0544f5f945e45044 | |
parent | 584231106242a6dd92f7744c0d9f5617574078c0 (diff) | |
download | gdk-pixbuf-3b0de24a7b2a2786c1c3b8ff3fbda1168e8909df.tar.gz |
Only query the colormap for GRAYSCALE and PSEUDOCOLOR visuals, and don't
Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu>
* gdk/gdkcolor.c (gdk_colormap_get_system): Only query
the colormap for GRAYSCALE and PSEUDOCOLOR visuals,
and don't ask for more than 256 colors in any case.
* gdk/gdkwindow.c (gdk_window_internal_destroy): Remove
the input window information when we destroy the window,
not when we are notified of it.
* gdk/gdkinputcommon.h (gdk_input_device_new): Work around
bug in XFree86 3.3.1's handling of Wacom macro buttons.
by assumming no device will report exactly 25 buttons.
* gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill
in string translation for generated key press events,
do sanity checking on received key codes.
* gdk/gdkcc.c (gdk_color_context_new): Allocate enough
room for a GdkColorContextPrivate, not just for a
GdkColorContext.
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 22 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 22 | ||||
-rw-r--r-- | gdk/gdkcc.c | 6 | ||||
-rw-r--r-- | gdk/gdkcolor.c | 36 | ||||
-rw-r--r-- | gdk/gdkinputcommon.h | 39 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 6 | ||||
-rw-r--r-- | gdk/x11/gdkcc-x11.c | 6 | ||||
-rw-r--r-- | gdk/x11/gdkcolor-x11.c | 36 | ||||
-rw-r--r-- | gdk/x11/gdkinput-x11.c | 39 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 6 |
15 files changed, 278 insertions, 50 deletions
@@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 107c23f14..e08398b60 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,25 @@ +Tue Feb 3 15:34:27 1998 Owen Taylor <owt1@cornell.edu> + + * gdk/gdkcolor.c (gdk_colormap_get_system): Only query + the colormap for GRAYSCALE and PSEUDOCOLOR visuals, + and don't ask for more than 256 colors in any case. + + * gdk/gdkwindow.c (gdk_window_internal_destroy): Remove + the input window information when we destroy the window, + not when we are notified of it. + + * gdk/gdkinputcommon.h (gdk_input_device_new): Work around + bug in XFree86 3.3.1's handling of Wacom macro buttons. + by assumming no device will report exactly 25 buttons. + + * gdk/gdkinputcommon.h (gdk_input_common_other_event): Fill + in string translation for generated key press events, + do sanity checking on received key codes. + + * gdk/gdkcc.c (gdk_color_context_new): Allocate enough + room for a GdkColorContextPrivate, not just for a + GdkColorContext. + Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org> * gtk/testgtk.c: don't add the same menu to different menuitems/ diff --git a/gdk/gdkcc.c b/gdk/gdkcc.c index d105db5f5..cd0c314f4 100644 --- a/gdk/gdkcc.c +++ b/gdk/gdkcc.c @@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual, g_assert (visual != NULL); g_assert (colormap != NULL); - - cc = g_new (GdkColorContext, 1); - ccp = (GdkColorContextPrivate *) cc; + + ccp = g_new (GdkColorContextPrivate, 1); + cc = (GdkColorContext *) ccp; ccp->xdisplay = gdk_display; cc->visual = visual; cc->colormap = colormap; diff --git a/gdk/gdkcolor.c b/gdk/gdkcolor.c index 5da61f063..7bc436957 100644 --- a/gdk/gdkcolor.c +++ b/gdk/gdkcolor.c @@ -174,23 +174,27 @@ gdk_colormap_get_system (void) private->next_color = 0; private->ref_count = 1; - for (i = 0; i < 256; i++) + if ((private->visual->type == GDK_VISUAL_GRAYSCALE) || + (private->visual->type == GDK_VISUAL_PSEUDO_COLOR)) { - xpalette[i].pixel = i; - xpalette[i].red = 0; - xpalette[i].green = 0; - xpalette[i].blue = 0; - } - - XQueryColors (gdk_display, private->xcolormap, xpalette, - private->visual->colormap_size); - - for (i = 0; i < 256; i++) - { - colormap->colors[i].pixel = xpalette[i].pixel; - colormap->colors[i].red = xpalette[i].red; - colormap->colors[i].green = xpalette[i].green; - colormap->colors[i].blue = xpalette[i].blue; + for (i = 0; i < 256; i++) + { + xpalette[i].pixel = i; + xpalette[i].red = 0; + xpalette[i].green = 0; + xpalette[i].blue = 0; + } + + XQueryColors (gdk_display, private->xcolormap, xpalette, + MIN (private->visual->colormap_size, 256)); + + for (i = 0; i < 256; i++) + { + colormap->colors[i].pixel = xpalette[i].pixel; + colormap->colors[i].red = xpalette[i].red; + colormap->colors[i].green = xpalette[i].green; + colormap->colors[i].blue = xpalette[i].blue; + } } gdk_colormap_add (colormap); diff --git a/gdk/gdkinputcommon.h b/gdk/gdkinputcommon.h index 9b7d2c683..b0f7a058d 100644 --- a/gdk/gdkinputcommon.h +++ b/gdk/gdkinputcommon.h @@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core) case KeyClass: { XKeyInfo *xki = (XKeyInfo *)class; - gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; - gdkdev->min_keycode = xki->min_keycode; + /* Hack to catch XFree86 3.3.1 bug. Other devices better + * not have exactly 25 keys... + */ + if ((xki->min_keycode == 8) && (xki->max_keycode == 32)) + { + gdkdev->info.num_keys = 32; + gdkdev->min_keycode = 0; + } + else + { + gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; + gdkdev->min_keycode = xki->min_keycode; + } gdkdev->info.keys = g_new (GdkDeviceKey, gdkdev->info.num_keys); for (j=0; j<gdkdev->info.num_keys; j++) @@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event, (xevent->type == gdkdev->keyrelease_type)) { XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent); - event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval; if (gdk_show_events) g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n", @@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event, xdke->deviceid, xdke->keycode); + if (xdke->keycode < gdkdev->min_keycode || + xdke->keycode >= gdkdev->min_keycode + gdkdev->info.num_keys) + { + g_warning ("Invalid device key code received"); + return FALSE; + } + + event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval; + if (event->key.keyval == 0) { if (gdk_show_events) @@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event, event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state) | gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].modifiers; + /* Add a string translation for the key event */ + if ((event->key.keyval >= 0x20) && (event->key.keyval <= 0xFF)) + { + event->key.length = 1; + event->key.string = g_new (gchar, 2); + event->key.string[0] = (gchar)event->key.keyval; + event->key.string[1] = 0; + } + else + { + event->key.length = 0; + event->key.string = g_new0 (gchar, 1); + } + if (gdk_show_events) g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n", event->key.keyval, diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 35e09cfc5..9d6706b61 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy) g_list_free (children); + if (private->extension_events != 0) + gdk_input_window_destroy (window); + if(private->dnd_drag_data_numtypesavail > 0) { g_free (private->dnd_drag_data_typesavail); @@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window) private = (GdkWindowPrivate*) window; - if (private->extension_events != 0) - gdk_input_window_destroy (window); - gdk_xid_table_remove (private->xwindow); gdk_window_unref (window); } diff --git a/gdk/x11/gdkcc-x11.c b/gdk/x11/gdkcc-x11.c index d105db5f5..cd0c314f4 100644 --- a/gdk/x11/gdkcc-x11.c +++ b/gdk/x11/gdkcc-x11.c @@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual, g_assert (visual != NULL); g_assert (colormap != NULL); - - cc = g_new (GdkColorContext, 1); - ccp = (GdkColorContextPrivate *) cc; + + ccp = g_new (GdkColorContextPrivate, 1); + cc = (GdkColorContext *) ccp; ccp->xdisplay = gdk_display; cc->visual = visual; cc->colormap = colormap; diff --git a/gdk/x11/gdkcolor-x11.c b/gdk/x11/gdkcolor-x11.c index 5da61f063..7bc436957 100644 --- a/gdk/x11/gdkcolor-x11.c +++ b/gdk/x11/gdkcolor-x11.c @@ -174,23 +174,27 @@ gdk_colormap_get_system (void) private->next_color = 0; private->ref_count = 1; - for (i = 0; i < 256; i++) + if ((private->visual->type == GDK_VISUAL_GRAYSCALE) || + (private->visual->type == GDK_VISUAL_PSEUDO_COLOR)) { - xpalette[i].pixel = i; - xpalette[i].red = 0; - xpalette[i].green = 0; - xpalette[i].blue = 0; - } - - XQueryColors (gdk_display, private->xcolormap, xpalette, - private->visual->colormap_size); - - for (i = 0; i < 256; i++) - { - colormap->colors[i].pixel = xpalette[i].pixel; - colormap->colors[i].red = xpalette[i].red; - colormap->colors[i].green = xpalette[i].green; - colormap->colors[i].blue = xpalette[i].blue; + for (i = 0; i < 256; i++) + { + xpalette[i].pixel = i; + xpalette[i].red = 0; + xpalette[i].green = 0; + xpalette[i].blue = 0; + } + + XQueryColors (gdk_display, private->xcolormap, xpalette, + MIN (private->visual->colormap_size, 256)); + + for (i = 0; i < 256; i++) + { + colormap->colors[i].pixel = xpalette[i].pixel; + colormap->colors[i].red = xpalette[i].red; + colormap->colors[i].green = xpalette[i].green; + colormap->colors[i].blue = xpalette[i].blue; + } } gdk_colormap_add (colormap); diff --git a/gdk/x11/gdkinput-x11.c b/gdk/x11/gdkinput-x11.c index 9b7d2c683..b0f7a058d 100644 --- a/gdk/x11/gdkinput-x11.c +++ b/gdk/x11/gdkinput-x11.c @@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core) case KeyClass: { XKeyInfo *xki = (XKeyInfo *)class; - gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; - gdkdev->min_keycode = xki->min_keycode; + /* Hack to catch XFree86 3.3.1 bug. Other devices better + * not have exactly 25 keys... + */ + if ((xki->min_keycode == 8) && (xki->max_keycode == 32)) + { + gdkdev->info.num_keys = 32; + gdkdev->min_keycode = 0; + } + else + { + gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; + gdkdev->min_keycode = xki->min_keycode; + } gdkdev->info.keys = g_new (GdkDeviceKey, gdkdev->info.num_keys); for (j=0; j<gdkdev->info.num_keys; j++) @@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event, (xevent->type == gdkdev->keyrelease_type)) { XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent); - event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval; if (gdk_show_events) g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n", @@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event, xdke->deviceid, xdke->keycode); + if (xdke->keycode < gdkdev->min_keycode || + xdke->keycode >= gdkdev->min_keycode + gdkdev->info.num_keys) + { + g_warning ("Invalid device key code received"); + return FALSE; + } + + event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval; + if (event->key.keyval == 0) { if (gdk_show_events) @@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event, event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state) | gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].modifiers; + /* Add a string translation for the key event */ + if ((event->key.keyval >= 0x20) && (event->key.keyval <= 0xFF)) + { + event->key.length = 1; + event->key.string = g_new (gchar, 2); + event->key.string[0] = (gchar)event->key.keyval; + event->key.string[1] = 0; + } + else + { + event->key.length = 0; + event->key.string = g_new0 (gchar, 1); + } + if (gdk_show_events) g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n", event->key.keyval, diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 35e09cfc5..9d6706b61 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy) g_list_free (children); + if (private->extension_events != 0) + gdk_input_window_destroy (window); + if(private->dnd_drag_data_numtypesavail > 0) { g_free (private->dnd_drag_data_typesavail); @@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window) private = (GdkWindowPrivate*) window; - if (private->extension_events != 0) - gdk_input_window_destroy (window); - gdk_xid_table_remove (private->xwindow); gdk_window_unref (window); } |