XQuartz: xpr: Initialize window_hash in xprInit
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
		
							parent
							
								
									1596ea72d6
								
							
						
					
					
						commit
						bac34a54f7
					
				| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Xplugin rootless implementation frame functions
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
 | 
			
		||||
 * Copyright (c) 2002-2011 Apple Computer, Inc. All rights reserved.
 | 
			
		||||
 * Copyright (c) 2003 Torrey T. Lyons. All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +35,6 @@
 | 
			
		|||
#include "rootlessCommon.h"
 | 
			
		||||
#include <Xplugin.h>
 | 
			
		||||
#include "x-hash.h"
 | 
			
		||||
#include "x-list.h"
 | 
			
		||||
#include "applewmExt.h"
 | 
			
		||||
 | 
			
		||||
#include "propertyst.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +60,10 @@ DEFINE_ATOM_HELPER(xa_native_window_id, "_NATIVE_WINDOW_ID")
 | 
			
		|||
 | 
			
		||||
/* Maps xp_window_id -> RootlessWindowRec */
 | 
			
		||||
static x_hash_table *window_hash;
 | 
			
		||||
 | 
			
		||||
/* Need to guard window_hash since xprGetXWindowFromAppKit and xprIsX11Window
 | 
			
		||||
 * can be called from any thread.
 | 
			
		||||
 */
 | 
			
		||||
static pthread_mutex_t window_hash_mutex;
 | 
			
		||||
 | 
			
		||||
/* Prototypes for static functions */
 | 
			
		||||
| 
						 | 
				
			
			@ -178,12 +181,6 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
 | 
			
		|||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (window_hash == NULL)
 | 
			
		||||
    {
 | 
			
		||||
        window_hash = x_hash_table_new(NULL, NULL, NULL, NULL);
 | 
			
		||||
        pthread_mutex_init(&window_hash_mutex, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pthread_mutex_lock(&window_hash_mutex);
 | 
			
		||||
    x_hash_table_insert(window_hash, pFrame->wid, pFrame);
 | 
			
		||||
    pthread_mutex_unlock(&window_hash_mutex);
 | 
			
		||||
| 
						 | 
				
			
			@ -256,6 +253,7 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
 | 
			
		|||
static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
 | 
			
		||||
    xp_window_changes wc;
 | 
			
		||||
    unsigned int mask = XP_STACKING;
 | 
			
		||||
    RootlessWindowRec *winRec;
 | 
			
		||||
 | 
			
		||||
    /* Stack frame below nextWid it if it exists, or raise
 | 
			
		||||
       frame above everything otherwise. */
 | 
			
		||||
| 
						 | 
				
			
			@ -268,8 +266,7 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
 | 
			
		|||
        wc.sibling = x_cvt_vptr_to_uint(nextWid);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(window_hash) {
 | 
			
		||||
        RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, wid, NULL);
 | 
			
		||||
    winRec = x_hash_table_lookup(window_hash, wid, NULL);
 | 
			
		||||
 | 
			
		||||
    if(winRec) {
 | 
			
		||||
        if(XQuartzIsRootless)
 | 
			
		||||
| 
						 | 
				
			
			@ -280,7 +277,6 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
 | 
			
		|||
            wc.window_level = rooted_window_levels[winRec->level];
 | 
			
		||||
        mask |= XP_WINDOW_LEVEL;
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    xprConfigureWindow(x_cvt_vptr_to_uint(wid), mask, &wc);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -450,6 +446,9 @@ xprInit(ScreenPtr pScreen)
 | 
			
		|||
    rootless_CopyBytes_threshold = xp_copy_bytes_threshold;
 | 
			
		||||
    rootless_CopyWindow_threshold = xp_scroll_area_threshold;
 | 
			
		||||
 | 
			
		||||
    assert((window_hash = x_hash_table_new(NULL, NULL, NULL, NULL)));
 | 
			
		||||
    assert(0 == pthread_mutex_init(&window_hash_mutex, NULL));
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -463,9 +462,6 @@ xprGetXWindow(xp_window_id wid)
 | 
			
		|||
{
 | 
			
		||||
    RootlessWindowRec *winRec;
 | 
			
		||||
 | 
			
		||||
    if (window_hash == NULL)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
 | 
			
		||||
 | 
			
		||||
    return winRec != NULL ? winRec->win : NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -483,11 +479,6 @@ xprGetXWindowFromAppKit(int windowNumber)
 | 
			
		|||
    Bool ret;
 | 
			
		||||
    xp_window_id wid;
 | 
			
		||||
 | 
			
		||||
    if (window_hash == NULL)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
 | 
			
		||||
    /* need to lock, since this function can be called by any thread */
 | 
			
		||||
 | 
			
		||||
    pthread_mutex_lock(&window_hash_mutex);
 | 
			
		||||
 | 
			
		||||
    if (xp_lookup_native_window(windowNumber, &wid))
 | 
			
		||||
| 
						 | 
				
			
			@ -514,11 +505,6 @@ xprIsX11Window(void *nsWindow, int windowNumber)
 | 
			
		|||
    Bool ret;
 | 
			
		||||
    xp_window_id wid;
 | 
			
		||||
 | 
			
		||||
    if (window_hash == NULL)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
 | 
			
		||||
    /* need to lock, since this function can be called by any thread */
 | 
			
		||||
 | 
			
		||||
    pthread_mutex_lock(&window_hash_mutex);
 | 
			
		||||
 | 
			
		||||
    if (xp_lookup_native_window(windowNumber, &wid))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue