Commit 3b0de24a authored by Owen Taylor's avatar Owen Taylor Committed by Owen Taylor

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.
parent 58423110
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
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> Tue Feb 3 15:09:55 1998 Tim Janik <timj@gimp.org>
* gtk/testgtk.c: don't add the same menu to different menuitems/ * gtk/testgtk.c: don't add the same menu to different menuitems/
......
...@@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual, ...@@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual,
g_assert (visual != NULL); g_assert (visual != NULL);
g_assert (colormap != NULL); g_assert (colormap != NULL);
cc = g_new (GdkColorContext, 1); ccp = g_new (GdkColorContextPrivate, 1);
ccp = (GdkColorContextPrivate *) cc; cc = (GdkColorContext *) ccp;
ccp->xdisplay = gdk_display; ccp->xdisplay = gdk_display;
cc->visual = visual; cc->visual = visual;
cc->colormap = colormap; cc->colormap = colormap;
......
...@@ -174,23 +174,27 @@ gdk_colormap_get_system (void) ...@@ -174,23 +174,27 @@ gdk_colormap_get_system (void)
private->next_color = 0; private->next_color = 0;
private->ref_count = 1; 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; for (i = 0; i < 256; i++)
xpalette[i].red = 0; {
xpalette[i].green = 0; xpalette[i].pixel = i;
xpalette[i].blue = 0; xpalette[i].red = 0;
} xpalette[i].green = 0;
xpalette[i].blue = 0;
XQueryColors (gdk_display, private->xcolormap, xpalette, }
private->visual->colormap_size);
XQueryColors (gdk_display, private->xcolormap, xpalette,
for (i = 0; i < 256; i++) MIN (private->visual->colormap_size, 256));
{
colormap->colors[i].pixel = xpalette[i].pixel; for (i = 0; i < 256; i++)
colormap->colors[i].red = xpalette[i].red; {
colormap->colors[i].green = xpalette[i].green; colormap->colors[i].pixel = xpalette[i].pixel;
colormap->colors[i].blue = xpalette[i].blue; 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); gdk_colormap_add (colormap);
......
...@@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core) ...@@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core)
case KeyClass: case KeyClass:
{ {
XKeyInfo *xki = (XKeyInfo *)class; XKeyInfo *xki = (XKeyInfo *)class;
gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; /* Hack to catch XFree86 3.3.1 bug. Other devices better
gdkdev->min_keycode = xki->min_keycode; * 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); gdkdev->info.keys = g_new (GdkDeviceKey, gdkdev->info.num_keys);
for (j=0; j<gdkdev->info.num_keys; j++) for (j=0; j<gdkdev->info.num_keys; j++)
...@@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event,
(xevent->type == gdkdev->keyrelease_type)) (xevent->type == gdkdev->keyrelease_type))
{ {
XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent); XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent);
event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval;
if (gdk_show_events) if (gdk_show_events)
g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n", g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n",
...@@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event,
xdke->deviceid, xdke->deviceid,
xdke->keycode); 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 (event->key.keyval == 0)
{ {
if (gdk_show_events) if (gdk_show_events)
...@@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event,
event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state) event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state)
| gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].modifiers; | 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) if (gdk_show_events)
g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n", g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n",
event->key.keyval, event->key.keyval,
......
...@@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy) ...@@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy)
g_list_free (children); g_list_free (children);
if (private->extension_events != 0)
gdk_input_window_destroy (window);
if(private->dnd_drag_data_numtypesavail > 0) if(private->dnd_drag_data_numtypesavail > 0)
{ {
g_free (private->dnd_drag_data_typesavail); g_free (private->dnd_drag_data_typesavail);
...@@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window) ...@@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window)
private = (GdkWindowPrivate*) window; private = (GdkWindowPrivate*) window;
if (private->extension_events != 0)
gdk_input_window_destroy (window);
gdk_xid_table_remove (private->xwindow); gdk_xid_table_remove (private->xwindow);
gdk_window_unref (window); gdk_window_unref (window);
} }
......
...@@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual, ...@@ -507,9 +507,9 @@ gdk_color_context_new (GdkVisual *visual,
g_assert (visual != NULL); g_assert (visual != NULL);
g_assert (colormap != NULL); g_assert (colormap != NULL);
cc = g_new (GdkColorContext, 1); ccp = g_new (GdkColorContextPrivate, 1);
ccp = (GdkColorContextPrivate *) cc; cc = (GdkColorContext *) ccp;
ccp->xdisplay = gdk_display; ccp->xdisplay = gdk_display;
cc->visual = visual; cc->visual = visual;
cc->colormap = colormap; cc->colormap = colormap;
......
...@@ -174,23 +174,27 @@ gdk_colormap_get_system (void) ...@@ -174,23 +174,27 @@ gdk_colormap_get_system (void)
private->next_color = 0; private->next_color = 0;
private->ref_count = 1; 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; for (i = 0; i < 256; i++)
xpalette[i].red = 0; {
xpalette[i].green = 0; xpalette[i].pixel = i;
xpalette[i].blue = 0; xpalette[i].red = 0;
} xpalette[i].green = 0;
xpalette[i].blue = 0;
XQueryColors (gdk_display, private->xcolormap, xpalette, }
private->visual->colormap_size);
XQueryColors (gdk_display, private->xcolormap, xpalette,
for (i = 0; i < 256; i++) MIN (private->visual->colormap_size, 256));
{
colormap->colors[i].pixel = xpalette[i].pixel; for (i = 0; i < 256; i++)
colormap->colors[i].red = xpalette[i].red; {
colormap->colors[i].green = xpalette[i].green; colormap->colors[i].pixel = xpalette[i].pixel;
colormap->colors[i].blue = xpalette[i].blue; 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); gdk_colormap_add (colormap);
......
...@@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core) ...@@ -177,8 +177,19 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core)
case KeyClass: case KeyClass:
{ {
XKeyInfo *xki = (XKeyInfo *)class; XKeyInfo *xki = (XKeyInfo *)class;
gdkdev->info.num_keys = xki->max_keycode - xki->min_keycode + 1; /* Hack to catch XFree86 3.3.1 bug. Other devices better
gdkdev->min_keycode = xki->min_keycode; * 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); gdkdev->info.keys = g_new (GdkDeviceKey, gdkdev->info.num_keys);
for (j=0; j<gdkdev->info.num_keys; j++) for (j=0; j<gdkdev->info.num_keys; j++)
...@@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -585,7 +596,6 @@ gdk_input_common_other_event (GdkEvent *event,
(xevent->type == gdkdev->keyrelease_type)) (xevent->type == gdkdev->keyrelease_type))
{ {
XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent); XDeviceKeyEvent *xdke = (XDeviceKeyEvent *)(xevent);
event->key.keyval = gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].keyval;
if (gdk_show_events) if (gdk_show_events)
g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n", g_print ("device key %s:\twindow: %ld device: %ld keycode: %d\n",
...@@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -594,6 +604,15 @@ gdk_input_common_other_event (GdkEvent *event,
xdke->deviceid, xdke->deviceid,
xdke->keycode); 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 (event->key.keyval == 0)
{ {
if (gdk_show_events) if (gdk_show_events)
...@@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event, ...@@ -611,6 +630,20 @@ gdk_input_common_other_event (GdkEvent *event,
event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state) event->key.state = gdk_input_translate_state(xdke->state, xdke->device_state)
| gdkdev->info.keys[xdke->keycode - gdkdev->min_keycode].modifiers; | 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) if (gdk_show_events)
g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n", g_print ("\t\ttranslation - keyval: %d modifiers: %#x\n",
event->key.keyval, event->key.keyval,
......
...@@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy) ...@@ -382,6 +382,9 @@ gdk_window_internal_destroy (GdkWindow *window, int xdestroy)
g_list_free (children); g_list_free (children);
if (private->extension_events != 0)
gdk_input_window_destroy (window);
if(private->dnd_drag_data_numtypesavail > 0) if(private->dnd_drag_data_numtypesavail > 0)
{ {
g_free (private->dnd_drag_data_typesavail); g_free (private->dnd_drag_data_typesavail);
...@@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window) ...@@ -430,9 +433,6 @@ gdk_window_destroy_notify (GdkWindow *window)
private = (GdkWindowPrivate*) window; private = (GdkWindowPrivate*) window;
if (private->extension_events != 0)
gdk_input_window_destroy (window);
gdk_xid_table_remove (private->xwindow); gdk_xid_table_remove (private->xwindow);
gdk_window_unref (window); gdk_window_unref (window);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment