XQuartz: LP64 related casting fixes from Bob Murphy

(cherry picked from commit ea71710aaa7166ab510abe70f2dc47942de0ead7)
This commit is contained in:
Jeremy Huddleston 2008-10-31 18:58:57 -07:00
parent 20239a4dee
commit c5086badf0
11 changed files with 119 additions and 46 deletions

View File

@ -230,9 +230,9 @@ static void __glXAquaContextDestroy(__GLXcontext *baseContext) {
(unsigned int) baseContext);
if (context != NULL) {
if (context->sid != 0 && surface_hash != NULL) {
lst = x_hash_table_lookup(surface_hash, (void *) context->sid, NULL);
lst = x_hash_table_lookup(surface_hash, x_cvt_uint_to_vptr(context->sid), NULL);
lst = x_list_remove(lst, context);
x_hash_table_insert(surface_hash, (void *) context->sid, lst);
x_hash_table_insert(surface_hash, x_cvt_uint_to_vptr(context->sid), lst);
}
if (context->ctx != NULL) CGLDestroyContext(context->ctx);
@ -273,14 +273,14 @@ static void surface_notify(void *_arg, void *data) {
switch (arg->kind) {
case AppleDRISurfaceNotifyDestroyed:
if (surface_hash != NULL)
x_hash_table_remove(surface_hash, (void *) arg->id);
x_hash_table_remove(surface_hash, x_cvt_uint_to_vptr(arg->id));
draw->base.pDraw = NULL;
draw->sid = 0;
break;
case AppleDRISurfaceNotifyChanged:
if (surface_hash != NULL) {
lst = x_hash_table_lookup(surface_hash, (void *) arg->id, NULL);
lst = x_hash_table_lookup(surface_hash, x_cvt_uint_to_vptr(arg->id), NULL);
for (; lst != NULL; lst = lst->next)
{
context = lst->data;
@ -316,7 +316,7 @@ static void attach(__GLXAquaContext *context, __GLXAquaDrawable *draw) {
DRIDestroySurface(pDraw->pScreen, pDraw->id, pDraw,
surface_notify, draw);
if (surface_hash != NULL)
x_hash_table_remove(surface_hash, (void *) draw->sid);
x_hash_table_remove(surface_hash, x_cvt_uint_to_vptr(draw->sid));
draw->sid = 0;
return;
@ -328,10 +328,10 @@ static void attach(__GLXAquaContext *context, __GLXAquaDrawable *draw) {
if (surface_hash == NULL)
surface_hash = x_hash_table_new(NULL, NULL, NULL, NULL);
lst = x_hash_table_lookup(surface_hash, (void *) context->sid, NULL);
lst = x_hash_table_lookup(surface_hash, x_cvt_uint_to_vptr(context->sid), NULL);
if (x_list_find(lst, context) == NULL) {
lst = x_list_prepend(lst, context);
x_hash_table_insert(surface_hash, (void *) context->sid, lst);
x_hash_table_insert(surface_hash, x_cvt_uint_to_vptr(context->sid), lst);
}
GLAQUA_DEBUG_MSG("attached 0x%x to 0x%x\n", (unsigned int) pDraw->id,

View File

@ -353,8 +353,14 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
}
- (void) show_hide_menubar:(NSNumber *)state {
#if defined(__LP64__)
/* Also shows/hides the dock */
if ([state boolValue]) SetSystemUIMode(kUIModeNormal, 0);
else SetSystemUIMode(kUIModeAllHidden, 0);
#else
if ([state boolValue]) ShowMenuBar ();
else HideMenuBar ();
#endif
}

View File

@ -238,7 +238,7 @@ static void QuartzCoreAudioBell(
OSStatus status;
status = AudioDeviceStart(quartzAudioDevice, QuartzAudioIOProc);
if (status) {
ErrorF("QuartzAudioBell: AudioDeviceStart returned %ld\n", status);
ErrorF("QuartzAudioBell: AudioDeviceStart returned %ld\n", (long)status);
} else {
data.playing = TRUE;
}
@ -299,7 +299,7 @@ void QuartzAudioInit(void)
&propertySize, &outputDevice);
if (status) {
ErrorF("QuartzAudioInit: AudioHardwareGetProperty returned %ld\n",
status);
(long)status);
return;
}
if (outputDevice == kAudioDeviceUnknown) {
@ -314,7 +314,7 @@ void QuartzAudioInit(void)
&propertySize, &outputStreamDescription);
if (status) {
ErrorF("QuartzAudioInit: GetProperty(stream format) returned %ld\n",
status);
(long)status);
return;
}
sampleRate = outputStreamDescription.mSampleRate;
@ -339,7 +339,7 @@ void QuartzAudioInit(void)
// Prepare for playback
status = AudioDeviceAddIOProc(outputDevice, QuartzAudioIOProc, &data);
if (status) {
ErrorF("QuartzAudioInit: AddIOProc returned %ld\n", status);
ErrorF("QuartzAudioInit: AddIOProc returned %ld\n", (long)status);
return;
}

View File

@ -701,13 +701,16 @@ static KeySym make_dead_key(KeySym in) {
}
Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
#if !defined(__x86_64__) && !defined(__ppc64__)
#if !defined(__LP64__)
KeyboardLayoutRef key_layout;
#endif
const void *chr_data = NULL;
int num_keycodes = NUM_KEYCODES;
UInt32 keyboard_type = 0;
int is_uchr = 1, i, j;
#if !defined(__LP64__)
int is_uchr = 1;
#endif
int i, j;
OSStatus err;
KeySym *k;
CFDataRef currentKeyLayoutDataRef = NULL;
@ -721,7 +724,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
chr_data = CFDataGetBytePtr(currentKeyLayoutDataRef);
}
#if !defined(__x86_64__) && !defined(__ppc64__)
#if !defined(__LP64__)
if (chr_data == NULL) {
ErrorF("X11.app: Error detected in determining keyboard layout. If you are using an Apple-provided keyboard layout, please report this error at http://xquartz.macosforge.org and http://bugreport.apple.com\n");
ErrorF("X11.app: Debug Info: keyboard_type=%u, currentKeyLayoutRef=%p, currentKeyLayoutDataRef=%p, chr_data=%p\n",
@ -758,6 +761,9 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
an X11 keysym (which may just the bit that says "this is
Unicode" if it can't find the real symbol.) */
/* KeyTranslate is not available on 64-bit platforms; UCKeyTranslate
must be used instead. */
for (i = 0; i < num_keycodes; i++) {
static const int mods[4] = {0, MOD_SHIFT, MOD_OPTION,
MOD_OPTION | MOD_SHIFT};
@ -765,7 +771,9 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
k = info->keyMap + i * GLYPHS_PER_KEY;
for (j = 0; j < 4; j++) {
#if !defined(__LP64__)
if (is_uchr) {
#endif
UniChar s[8];
UniCharCount len;
UInt32 dead_key_state = 0, extra_dead = 0;
@ -789,6 +797,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
k[j] = ucs2keysym (s[0]);
if (dead_key_state != 0) k[j] = make_dead_key (k[j]);
}
#if !defined(__LP64__)
} else { // kchr
UInt32 c, state = 0, state2 = 0;
UInt16 code;
@ -812,6 +821,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
if (state != 0) k[j] = make_dead_key (k[j]);
}
}
#endif
}
if (k[3] == k[2]) k[3] = NoSymbol;

View File

@ -56,6 +56,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "dri.h"
#include "dristruct.h"
#include "xpr.h"
#include "x-hash.h"
static int DRIErrorBase = 0;
@ -190,7 +191,7 @@ static void surface_notify(
)
{
DRISurfaceNotifyArg *arg = _arg;
int client_index = (int) data;
int client_index = (int) x_cvt_vptr_to_uint(data);
ClientPtr client;
xAppleDRINotifyEvent se;
@ -236,7 +237,8 @@ ProcAppleDRICreateSurface(
if (!DRICreateSurface( screenInfo.screens[stuff->screen],
(Drawable)stuff->drawable, pDrawable,
stuff->client_id, &sid, key,
surface_notify, (void *) client->index)) {
surface_notify,
x_cvt_uint_to_vptr(client->index))) {
return BadValue;
}

View File

@ -376,7 +376,7 @@ DRICreateSurface(ScreenPtr pScreen, Drawable id,
pDRIDrawablePriv->notifiers = NULL;
/* find the physical window */
wid = (xp_window_id) RootlessFrameForWindow(pWin, TRUE);
wid = x_cvt_vptr_to_uint(RootlessFrameForWindow(pWin, TRUE));
if (wid == 0) {
xfree(pDRIDrawablePriv);
return FALSE;
@ -472,7 +472,7 @@ DRICreateSurface(ScreenPtr pScreen, Drawable id,
if (surface_hash == NULL)
surface_hash = x_hash_table_new(NULL, NULL, NULL, NULL);
x_hash_table_insert(surface_hash,
(void *) pDRIDrawablePriv->sid, pDRIDrawablePriv);
x_cvt_uint_to_vptr(pDRIDrawablePriv->sid), pDRIDrawablePriv);
/* track this in case this window is destroyed */
AddResource(id, DRIDrawablePrivResType, (pointer)pDrawable);
@ -554,7 +554,7 @@ DRIDrawablePrivDelete(pointer pResource, XID id)
if (pDRIDrawablePriv->sid != 0) {
xp_destroy_surface(pDRIDrawablePriv->sid);
x_hash_table_remove(surface_hash, (void *) pDRIDrawablePriv->sid);
x_hash_table_remove(surface_hash, x_cvt_uint_to_vptr(pDRIDrawablePriv->sid));
}
if (pDRIDrawablePriv->notifiers != NULL)
@ -716,7 +716,7 @@ DRISurfaceNotify(xp_surface_id id, int kind)
if (surface_hash != NULL)
{
pDRIDrawablePriv = x_hash_table_lookup(surface_hash,
(void *) id, NULL);
x_cvt_uint_to_vptr(id), NULL);
}
if (pDRIDrawablePriv == NULL)
@ -725,7 +725,7 @@ DRISurfaceNotify(xp_surface_id id, int kind)
if (kind == AppleDRISurfaceNotifyDestroyed)
{
pDRIDrawablePriv->sid = 0;
x_hash_table_remove(surface_hash, (void *) id);
x_hash_table_remove(surface_hash, x_cvt_uint_to_vptr(id));
}
x_hook_run(pDRIDrawablePriv->notifiers, &arg);

View File

@ -80,13 +80,13 @@ hash_table_destroy_item (x_hash_table *h, void *k, void *v)
(*h->destroy_value) (v);
}
static inline unsigned int
static inline size_t
hash_table_hash_key (x_hash_table *h, void *k)
{
if (h->hash_key != 0)
return (*h->hash_key) (k);
else
return (unsigned int) k;
return (size_t) k;
}
static inline int
@ -104,7 +104,7 @@ hash_table_split (x_hash_table *h)
x_list **new, **old;
x_list *node, *item, *next;
int new_size, old_size;
unsigned int b;
size_t b;
int i;
if (h->bucket_index == N_BUCKET_SIZES - 1)
@ -207,7 +207,7 @@ X_PFX (hash_table_size) (x_hash_table *h)
static void
hash_table_modify (x_hash_table *h, void *k, void *v, int replace)
{
unsigned int hash_value;
size_t hash_value;
x_list *node, *item;
assert (h != NULL);
@ -266,7 +266,7 @@ X_PFX (hash_table_replace) (x_hash_table *h, void *k, void *v)
X_EXTERN void
X_PFX (hash_table_remove) (x_hash_table *h, void *k)
{
unsigned int hash_value;
size_t hash_value;
x_list **ptr, *item;
assert (h != NULL);
@ -294,7 +294,7 @@ X_PFX (hash_table_remove) (x_hash_table *h, void *k)
X_EXTERN void *
X_PFX (hash_table_lookup) (x_hash_table *h, void *k, void **k_ret)
{
unsigned int hash_value;
size_t hash_value;
x_list *node, *item;
assert (h != NULL);

View File

@ -30,6 +30,9 @@
#ifndef X_HASH_H
#define X_HASH_H 1
#include <stdlib.h>
#include <assert.h>
typedef struct x_hash_table_struct x_hash_table;
typedef int (x_compare_fun) (const void *a, const void *b);
@ -57,4 +60,32 @@ X_EXTERN void X_PFX (hash_table_foreach) (x_hash_table *h,
x_hash_foreach_fun *fun,
void *data);
/* Conversion between unsigned int (e.g. xp_resource_id) and void pointer */
/* Forward declarations */
static __inline__ void *
X_PFX (cvt_uint_to_vptr) (unsigned int val) __attribute__((always_inline));
static __inline__ unsigned int
X_PFX (cvt_vptr_to_uint) (void * val) __attribute__((always_inline));
/* Implementations */
static __inline__ void *
X_PFX (cvt_uint_to_vptr) (unsigned int val)
{
return (void*)((size_t)(val));
}
static __inline__ unsigned int
X_PFX (cvt_vptr_to_uint) (void * val)
{
size_t sv = (size_t)val;
unsigned int uv = (unsigned int)sv;
/* If this assert fails, chances are val actually is a pointer,
or there's been memory corruption */
assert(sv == uv);
return uv;
}
#endif /* X_HASH_H */

View File

@ -41,12 +41,13 @@
#include <Xplugin.h>
#include <X11/X.h>
#include "quartz.h"
#include "x-hash.h"
/* This lookup table came straight from the Tiger X11 source. I tried to figure
* it out based on CGWindowLevel.h, but I dunno... -JH
*/
static const int normal_window_levels[AppleWMNumWindowLevels+1] = {
0, 3, 4, 5, LONG_MIN + 30, LONG_MIN + 29,
0, 3, 4, 5, INT_MIN + 30, INT_MIN + 29,
};
static const int rooted_window_levels[AppleWMNumWindowLevels+1] = {
202, 203, 204, 205, 201, 200
@ -59,7 +60,7 @@ static int xprSetWindowLevel(
xp_window_id wid;
xp_window_changes wc;
wid = (xp_window_id) RootlessFrameForWindow (pWin, TRUE);
wid = x_cvt_vptr_to_uint(RootlessFrameForWindow (pWin, TRUE));
if (wid == 0)
return BadWindow;
@ -90,7 +91,7 @@ static int xprFrameDraw(
{
xp_window_id wid;
wid = (xp_window_id) RootlessFrameForWindow (pWin, FALSE);
wid = x_cvt_vptr_to_uint(RootlessFrameForWindow (pWin, FALSE));
if (wid == 0)
return BadWindow;

View File

@ -49,6 +49,7 @@
#include "globals.h"
#include "servermd.h"
#include "dixevents.h"
#include "x-hash.h"
typedef struct {
int cursorVisible;

View File

@ -64,6 +64,28 @@ DEFINE_ATOM_HELPER(xa_native_window_id, "_NATIVE_WINDOW_ID")
static x_hash_table *window_hash;
static pthread_mutex_t window_hash_mutex;
/* Prototypes for static functions */
static Bool xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
int newX, int newY, RegionPtr pShape);
static void xprDestroyFrame(RootlessFrameID wid);
static void xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY);
static void xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
int newX, int newY, unsigned int newW, unsigned int newH,
unsigned int gravity);
static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid);
static void xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape);
static void xprUnmapFrame(RootlessFrameID wid);
static void xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow);
static void xprStopDrawing(RootlessFrameID wid, Bool flush);
static void xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage);
static void xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects,
int shift_x, int shift_y);
static void xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin);
static Bool xprDoReorderWindow(RootlessWindowPtr pFrame);
static void xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
int dx, int dy);
static inline xp_error
xprConfigureWindow(xp_window_id id, unsigned int mask,
const xp_window_changes *values)
@ -83,7 +105,7 @@ xprSetNativeProperty(RootlessWindowPtr pFrame)
TA_SERVER();
err = xp_get_native_window((xp_window_id) pFrame->wid, &native_id);
err = xp_get_native_window(x_cvt_vptr_to_uint(pFrame->wid), &native_id);
if (err == Success)
{
/* FIXME: move this to AppleWM extension */
@ -174,7 +196,7 @@ xprDestroyFrame(RootlessFrameID wid)
x_hash_table_remove(window_hash, wid);
pthread_mutex_unlock(&window_hash_mutex);
xp_destroy_window((xp_window_id) wid);
xp_destroy_window(x_cvt_vptr_to_uint(wid));
}
@ -191,7 +213,7 @@ xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY)
wc.x = newX;
wc.y = newY;
// ErrorF("xprMoveFrame(%d, %p, %d, %d)\n", wid, pScreen, newX, newY);
xprConfigureWindow((xp_window_id) wid, XP_ORIGIN, &wc);
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_ORIGIN, &wc);
}
@ -216,7 +238,7 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
/* It's unlikely that being async will save us anything here.
But it can't hurt. */
xprConfigureWindow((xp_window_id) wid, XP_BOUNDS, &wc);
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_BOUNDS, &wc);
}
@ -241,10 +263,10 @@ xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
else
{
wc.stack_mode = XP_MAPPED_BELOW;
wc.sibling = (xp_window_id) nextWid;
wc.sibling = x_cvt_vptr_to_uint(nextWid);
}
xprConfigureWindow((xp_window_id) wid, XP_STACKING, &wc);
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_STACKING, &wc);
}
@ -271,7 +293,7 @@ xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape)
wc.shape_tx = wc.shape_ty = 0;
xprConfigureWindow((xp_window_id) wid, XP_SHAPE, &wc);
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_SHAPE, &wc);
}
@ -288,7 +310,7 @@ xprUnmapFrame(RootlessFrameID wid)
wc.stack_mode = XP_UNMAPPED;
wc.sibling = 0;
xprConfigureWindow((xp_window_id) wid, XP_STACKING, &wc);
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_STACKING, &wc);
}
@ -305,9 +327,9 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow)
TA_SERVER();
err = xp_lock_window((xp_window_id) wid, NULL, NULL, data, rowbytes, NULL);
err = xp_lock_window(x_cvt_vptr_to_uint(wid), NULL, NULL, data, rowbytes, NULL);
if (err != Success)
FatalError("Could not lock window %i for drawing.", (int) wid);
FatalError("Could not lock window %i for drawing.", (int)x_cvt_vptr_to_uint(wid));
*pixelData = data[0];
*bytesPerRow = rowbytes[0];
@ -322,7 +344,7 @@ xprStopDrawing(RootlessFrameID wid, Bool flush)
{
TA_SERVER();
xp_unlock_window((xp_window_id) wid, flush);
xp_unlock_window(x_cvt_vptr_to_uint(wid), flush);
}
@ -334,7 +356,7 @@ xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage)
{
TA_SERVER();
xp_flush_window((xp_window_id) wid);
xp_flush_window(x_cvt_vptr_to_uint(wid));
}
@ -347,7 +369,7 @@ xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects,
{
TA_SERVER();
xp_mark_window((xp_window_id) wid, nrects, rects, shift_x, shift_y);
xp_mark_window(x_cvt_vptr_to_uint(wid), nrects, rects, shift_x, shift_y);
}
@ -389,7 +411,7 @@ xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects,
{
TA_SERVER();
xp_copy_window((xp_window_id) wid, (xp_window_id) wid,
xp_copy_window(x_cvt_vptr_to_uint(wid), x_cvt_vptr_to_uint(wid),
dstNrects, dstRects, dx, dy);
}
@ -446,7 +468,7 @@ xprGetXWindow(xp_window_id wid)
if (window_hash == NULL)
return NULL;
winRec = x_hash_table_lookup(window_hash, (void *) wid, NULL);
winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
return winRec != NULL ? winRec->win : NULL;
}
@ -477,7 +499,7 @@ xprGetXWindowFromAppKit(int windowNumber)
pthread_mutex_unlock(&window_hash_mutex);
if (!ret) return NULL;
winRec = x_hash_table_lookup(window_hash, (void *) wid, NULL);
winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
return winRec != NULL ? winRec->win : NULL;
}