summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXXStubs.c
diff options
context:
space:
mode:
authordas <das>2007-04-29 02:26:47 (GMT)
committerdas <das>2007-04-29 02:26:47 (GMT)
commit3d653839d0082e663196cd7d34738a73d9b99bca (patch)
treed8296fa62af852c5f2e743159973d854366b69fa /macosx/tkMacOSXXStubs.c
parentf56417828d72ab960fdc1268a1c126ca5da9fd89 (diff)
downloadtk-3d653839d0082e663196cd7d34738a73d9b99bca.zip
tk-3d653839d0082e663196cd7d34738a73d9b99bca.tar.gz
tk-3d653839d0082e663196cd7d34738a73d9b99bca.tar.bz2
* macosx/tkMacOSXCarbonEvents.c: add window event target carbon event
* macosx/tkMacOSXEvent.c: handler for all kEventClassWindow and * macosx/tkMacOSXEvent.h: kEventClassMouse events; move all * macosx/tkMacOSXNotify.c: remaining events except for * macosx/tkMacOSXWindowEvent.c: kEventClassKeyboard from dispatcher to application event handler; pass event handler callRef downstream; fix debug event tracing; process all tcl event types in carbon event timer; delay carbon event timer first fire; add TkMacOSXTrackingLoop() to mark enter/exit of event tracking loop during which all tcl events but only carbon update events should be processed by the timer (replaces various calls to Tcl_SetServiceMode()); rename TkMacOSXReceiveAndProcessEvent() to TkMacOSXReceiveAndDispatchEvent(), move it from tkMacOSXEvent.c to tkMacOSXCarbonEvents.c and modify it to dequeue only update events during a tracking loop; add TkMacOSXRunTclEventLoop() to standardize the various ways in use to run the tcl event loop; add handling of kEventClassAppearance events (for ScrollBarVariantChanged event). * macosx/tkMacOSXDialog.c: use new TkMacOSXTrackingLoop() around * macosx/tkMacOSXEvent.c: blocking API that puts up modal dialogs * macosx/tkMacOSXMenu.c: or when entering/exiting menu/control * macosx/tkMacOSXMouseEvent.c: tracking, window dragging and other * macosx/tkMacOSXScale.c: mouse tracking loops. * macosx/tkMacOSXScrlbr.c: * macosx/tkMacOSXWindowEvent.c: * macosx/tkMacOSXWm.c: * macosx/tkMacOSXDialog.c: use new TkMacOSXRunTclEventLoop() * macosx/tkMacOSXScale.c: instead of Tcl_DoOneEvent(), * macosx/tkMacOSXScrlbr.c: Tcl_ServiceAll(), TclServiceIdle() * macosx/tkMacOSXWindowEvent.c: and Tcl_GlobalEval("update idletasks"). * macosx/tkMacOSXColor.c: make available as Tk system colors all * macosx/tkMacOSXPort.h: appearance manager brushes, text colors and backgrounds with new and legacy names, as well as the fully transparent color "systemTransparent"; add TkMacOSXSetColorIn{Port,Context}() to directly set an X pixel color value in the current QD port resp. the given CG context without requiring passage through rgb representation (lossy for most system colors); modernize/remove Classic-era code; replace crufty strcmp() elseifs by Tcl_GetIndexFromObjStruct(). * macosx/tkMacOSXButton.c: use new TkMacOSXSetColorInPort() * macosx/tkMacOSXDraw.c: instead of setting rgb color directly * macosx/tkMacOSXMenubutton.c: to allow for non-rgb system colors. * macosx/tkMacOSXCursor.c: implement "none" cursor as on other platforms [Patch 1615427]; add all missing appearance manager cursors. * macosx/tkMacOSXDefault.h: set SELECT_FG_COLORs to None to match aqua L&F; use standard system color names; use new 'menu' system font; correct default scrollbar width. * macosx/tkMacOSXDraw.c: standardize initialization, use and * macosx/tkMacOSXInt.h: emptying of various static temp rgns * macosx/tkMacOSXRegion.c: onto two global RgnHandles; in debug * macosx/tkMacOSXSubwindows.c: builds, verify emptiness of these temp * macosx/tkMacOSXWindowEvent.c: rgns before use. * macosx/tkMacOSXDraw.c: add TkMacOSX{Setup,Restore}DrawingContext() to * macosx/tkMacOSXInt.h: abstract common setup & teardown of drawing environment (for both CG and QD); save/restore QD theme drawing state; handle GC clip region; add TkpClipDrawableToRect() to allow clipped drawing into drawable regardless of GC used; use new system color "systemWindowHeaderBackground" to setup background in themed toplevels; correct implementation of TkMacOSXMakeStippleMap(). * macosx/tkMacOSXEntry.c: use new TkMacOSXSetupDrawingContext() and * macosx/tkMacOSXFont.c: TkMacOSXRestoreDrawingContext() instead of various setup/teardown procs like TkMacOSX{SetUp,Release}CGContext(), TkMacOSXQuarz{Start,End}Draw(), TkMacOSXSetUpGraphicsPort() etc. * macosx/tkMacOSXEmbed.c: add CG context and drawable clip rgn fields * macosx/tkMacOSXInt.h: to MacDrawable struct. * macosx/tkMacOSXSubwindows.c: * macosx/tkMacOSXDialog.c: make -parent option of tk_getOpenFile et al. use the sheet version of NavServices dialogs; ensure native parent win exists before using StandardSheet API for tk_messageBox [Bug 1677611]; force sheets to behave like app-modal dialogs via WindowModality() API; use more modern ColorPicker API. * macosx/tkAboutDlg.r: use themed movable modal dialog, fix (c) year. * macosx/tkMacOSXEntry.c: take xOff/yOff of MacDrawable into account when computing locations/bounds to ensure correct posititioning when not drawing into intermediate pixmap. * macosx/tkMacOSXFont.c: use appearance manager API to map system font * macosx/tkMacOSXFont.h: names to TkFonts; add "menu" system font for menu item text drawing from MDEF; disable broken QD stippling. * macosx/tkMacOSXMenu.c: large-scale rewrite of custom * macosx/tkMacOSXMenu.r (removed): MDEF and related code that * unix/Makefile.in: restores many longtime-MIA features to working order (e.g. images, custom colors & fonts in menus etc); implement compound menu items; use Appearance Mgr and ThemeText APIs to mimic native MDEF as closely as possible when default "menu" system font is used; remove now obsolete SICN drawing code and resources. * macosx/tkMacOSXCarbonEvents.c: handle additional menu carbon events * macosx/tkMacOSXEvent.c: in order to support <<MenuSelect>> in * macosx/tkMacOSXMenu.c: the menubar and in menus that are not * macosx/tkMacOSXMenus.c: using the custom MDEF [Bug 1620826]; fix early and missing clearing of current Tk active menu entry; fix extraneous sending of <<MenuSelect>> during active menu entry clearing. * macosx/tkMacOSXMouseEvent.c: add support for async window dragging by the window server; set the corresponding window attribute by default. * macosx/tkMacOSXMouseEvent.c: rationalized handling order of non-mousedown events; add TkMacOSXModifierState() to retrieve the current key modifiers in carbon format. * macosx/tkMacOSXScrlbr.c: use appearance manager API to retrieve scrollbar component metrics; add awareness of multiple possibilites for scrollbar arrow position in aqua and handle user changes to arrow position pref; handle difference in metrics of small & large scrollbar variants; handle aqua "jump to here" scrollbar behaviour; correct computation of scroll view size and position; enforce min scrollbar height to avoid scrollbar component overlap; erase scrollbar area outside of standard width; remove broken auto-adjust code; account for window class when leaving space for grow box; remove code to manually draw grow box; use modern API for thumb scroll proc; replace HiliteControl() by modern API; replace control mgr constants with appearance mgr equivalents. * macosx/tkMacOSXSubwindows.c: use SetWindowBounds() API instead of SizeWindow(); invalidate clip regions after X{Map,Unmap}Window as fix for [Bug 940117] made them dependent on mapping state; remove unneeded calls to TkMacOSXInvalClipRgns() and unnecessary setting of QD port; use native-endian pixmap on intel; remove obsolete pixmap pix locking. * macosx/tkMacOSXWindowEvent.c: handle only the first of a batch of kEventAppAvailableWindowBoundsChanged events sent per transaction; handle kEventWindowBoundsChanged event to support live window resizing and centralized sending of location/size changed ConfigureNotify events; ensure HIGrowBox is redrawn after bounds change; constrain window after dragging to ensure titlebar is not inacessible offscreen or under dock/menubar; handle kEventWindowGetRegion and kEventWindowDrawContent for transparent windows to mark resp. paint content region as transparent; handle kEventWindowConstrain for fullscreen windows to ensure bounds match new screen size; enter/exit fullscreen UIMode upon activation/deactivation of fullscreen window. * macosx/tkMacOSXWm.c: use live-resize and async-drag carbon window * macosx/tkMacOSXWm.h: attributes for toplevels by default; implement new [wm attributes] -topmost, -transparent and -fullscreen; refactor WmAttributesCmd() parallelling the tkUnixWm.c implementation, use thus factored proc to set proxy icon from [wm iconbitmap]; dynamically determine default values for toplevel min and max sizes (similar to tkWinWm.c impl): min sizes depend on window class & attributes to ensure visibility of all titlebar widgets and grow box, max sizes depend on maximal window bounds for all active displays; factor out code that puts into effect changes to master or override_redirect; use RepositionWindow() API to determine staggered initial window bounds; correct resize limit calculations, handle gridding and use modern resize API in TkMacOSXGrowToplevel(); remove sending of ConfigureNotify after resize or zoom (now handled by BoundsChanged handler); correct composite carbon window attribute handling, remove currently unusable attributes and add new attributes in [tk::unsupported::MacWindowStyle]; ensure validity of window class and attributes before use; apply changes to window class when handling carbon window attribute changes (if HIWindowChangeClass() API available); add debug build warning message when deprecated window style is used instead of window class; use transparent HIGrowBox for resizable windows; avoid unnecessary calls to window structure width API; use tcl time API in TkpGetMS(); add TkMacOSXEnterExitFullscreen() to enter/exit UIMode with dock and menubar hidden; restrict wmTracing output to debug builds; remove unneeded calls to TkMacOSXInvalClipRgns() and unnecessary setting of QD port; workaround GetWindowStructureWidths() Carbon bug (bogus results for never-mapped floating windows). * macosx/tkMacOSXXStubs.c (TkMacOSXDisplayChanged): add maximal window bounds field to Screen record (in ext_data), computed as the union of available window positioning bounds of all graphics devices (displays). * macosx/tkMacOSXBitmap.c: fix macRoman encoding leak. * macosx/tkMacOSXCursor.c: * macosx/tkMacOSXDebug.c (TkMacOSXCarbonEventToAscii): use static * macosx/tkMacOSXDebug.h: buffer to simplify callers; const fixes. * macosx/tkMacOSXBitmap.c: use more efficient QDSwapPort() instead of * macosx/tkMacOSXButton.c: GetPort()/SetPort()/GetGWorld()/SetGWorld(). * macosx/tkMacOSXDraw.c: * macosx/tkMacOSXFont.c: * macosx/tkMacOSXMenubutton.c: * macosx/tkMacOSXScale.c: * macosx/tkMacOSXScrlbr.c: * macosx/tkMacOSXXStubs.c: * macosx/tkMacOSXColor.c: use kHIToolboxVersionNumber for runtime OS * macosx/tkMacOSXEntry.c: version check rather than Gestalt() etc. * macosx/tkMacOSXInt.h: * macosx/tkMacOSXWm.c: * macosx/tkMacOSXDraw.c: remove obsolete and now incorrect * macosx/tkMacOSXInt.h: tkMenuCascadeRgn clipping code. * macosx/tkMacOSXMenu.c: * macosx/tkMacOSXHLEvents.c: replace Tcl_GlobalEval() resp. Tcl_Eval() * macosx/tkMacOSXScrlbr.c: by Tcl_EvalEx(). * macosx/tkMacOSXInit.c: * macosx/tkMacOSXInit.c (TkpInit): reorder initialization steps. * macosx/tkMacOSXKeyEvent.c: remove pre-10.2 support. * macosx/tkMacOSXMenus.c: remove now useless call to TkMacOSXHandleTearoffMenu(); use \x.. quoting for non-latin1 macroman literar chars to allow file to be edited as utf-8. * macosx/tkMacOSXScale.c: replace TrackControl() by modern * macosx/tkMacOSXScrlbr.c: HandleControlClick() API (using new TkMacOSXModifierState()). * macosx/tkMacOSXInt.h: move all constant #defines needed to * macosx/tkMacOSXColor.c: support building on older OS X releases * macosx/tkMacOSXEvent.h: to a central location in tkMacOSXInt.h. * macosx/tkMacOSXFont.c: * macosx/tkMacOSXMenu.c: * macosx/tkMacOSXMenubutton.c: * macosx/tkMacOSXMenus.c: * macosx/tkMacOSXMouseEvent.c: * macosx/tkMacOSXWm.c: * macosx/tkMacOSXInt.h: add ChkErr() macro to factor out * macosx/tkMacOSXButton.c: Carbon OSStatus return value checking * macosx/tkMacOSXCarbonEvents.c: and TkMacOSXDbgMsg() macro to factour * macosx/tkMacOSXClipboard.c: out debug message output; use these * macosx/tkMacOSXColor.c: macros to replace #ifdef TK_MAC_DEBUG * macosx/tkMacOSXCursor.c: blocks & direct printing to stderr, * macosx/tkMacOSXDebug.c: and to do additional OSStatus return * macosx/tkMacOSXDialog.c: checking, and to standardize OSStatus * macosx/tkMacOSXDraw.c: usage. * macosx/tkMacOSXEntry.c: * macosx/tkMacOSXEvent.c: * macosx/tkMacOSXFont.c: * macosx/tkMacOSXHLEvents.c: * macosx/tkMacOSXInit.c: * macosx/tkMacOSXKeyEvent.c: * macosx/tkMacOSXMenu.c: * macosx/tkMacOSXMenubutton.c: * macosx/tkMacOSXMenus.c: * macosx/tkMacOSXMouseEvent.c: * macosx/tkMacOSXScrlbr.c: * macosx/tkMacOSXSubwindows.c: * macosx/tkMacOSXWindowEvent.c: * macosx/tkMacOSXWm.c: * macosx/tkMacOSXXStubs.c: * macosx/tkMacOSXSend.c: remove duplicate/unused declarations. * macosx/tkMacOSXXStubs.c: * macosx/tkMacOSXDebug.c: const fixes. * macosx/tkMacOSXInit.c: * macosx/tkMacOSXTest.c: * macosx/tkMacOSXWm.c: * macosx/tkMacOSXXStubs.c: * macosx/Wish-Info.plist.in: add tcl document extensions/mime types and LSMinimumSystemVersion, LSRequiresCarbon & NSAppleScriptEnabled keys. * macosx/tkMacOSXAETE.r: fix whitespace. * macosx/tkMacOSXConfig.c: * macosx/tkMacOSXCursors.r: * macosx/tkMacOSXKeyboard.c: * macosx/tkMacOSXSend.c: * macosx/tkMacOSXXCursors.r: * macosx/README: * macosx/Makefile: fix/add copyright and license refs. * macosx/Tk-Info.plist.in: * macosx/Wish-Info.plist.in: * macosx/tkMacOSX.h:
Diffstat (limited to 'macosx/tkMacOSXXStubs.c')
-rw-r--r--macosx/tkMacOSXXStubs.c335
1 files changed, 178 insertions, 157 deletions
diff --git a/macosx/tkMacOSXXStubs.c b/macosx/tkMacOSXXStubs.c
index 2ebf2b1..6891a3d 100644
--- a/macosx/tkMacOSXXStubs.c
+++ b/macosx/tkMacOSXXStubs.c
@@ -1,18 +1,19 @@
-/*
+/*
* tkMacOSXXStubs.c --
*
- * This file contains most of the X calls called by Tk. Many of
- * these calls are just stubs and either don't make sense on the
- * Macintosh or thier implamentation just doesn't do anything. Other
- * calls will eventually be moved into other files.
+ * This file contains most of the X calls called by Tk. Many of
+ * these calls are just stubs and either don't make sense on the
+ * Macintosh or thier implamentation just doesn't do anything. Other
+ * calls will eventually be moved into other files.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
* Copyright 2001, Apple Computer, Inc.
+ * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net>
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXXStubs.c,v 1.2.2.13 2006/09/10 17:07:36 das Exp $
+ * RCS: @(#) $Id: tkMacOSXXStubs.c,v 1.2.2.14 2007/04/29 02:26:51 das Exp $
*/
#include "tkMacOSXInt.h"
@@ -20,14 +21,14 @@
/*
* Because this file is still under major development Debugger statements are
- * used through out this file. The define TCL_DEBUG will decide whether
+ * used through out this file. The define TCL_DEBUG will decide whether
* the debugger statements actually call the debugger or not.
*/
#ifndef TCL_DEBUG
# define Debugger()
#endif
-
+
#define ROOT_ID 10
/*
@@ -35,30 +36,27 @@
*/
static TkDisplay *gMacDisplay = NULL; /* Macintosh display. */
-static char *macScreenName = ":0"; /* Default name of macintosh display. */
+static const char *macScreenName = ":0"; /* Default name of macintosh display. */
/*
* Forward declarations of procedures used in this file.
*/
-static XID MacXIdAlloc _ANSI_ARGS_((Display *display));
-static int DefaultErrorHandler _ANSI_ARGS_((Display* display,
- XErrorEvent* err_evt));
+static XID MacXIdAlloc(Display *display);
+static int DefaultErrorHandler(Display* display, XErrorEvent* err_evt);
/*
* Other declarations
*/
-static int TkMacOSXXDestroyImage _ANSI_ARGS_((XImage *image));
-static unsigned long TkMacOSXXGetPixel _ANSI_ARGS_((XImage *image, int x, int y));
-static int TkMacOSXXPutPixel _ANSI_ARGS_((XImage *image, int x, int y,
- unsigned long pixel));
-static XImage *TkMacOSXXSubImage _ANSI_ARGS_((XImage *image, int x, int y,
- unsigned int width, unsigned int height));
-static int TkMacOSXXAddPixel _ANSI_ARGS_((XImage *image, long value));
-int _XInitImageFuncPtrs _ANSI_ARGS_((XImage *image));
-
+static int TkMacOSXXDestroyImage(XImage *image);
+static unsigned long TkMacOSXXGetPixel(XImage *image, int x, int y);
+static int TkMacOSXXPutPixel(XImage *image, int x, int y, unsigned long pixel);
+static XImage *TkMacOSXXSubImage(XImage *image, int x, int y,
+ unsigned int width, unsigned int height);
+static int TkMacOSXXAddPixel(XImage *image, long value);
+
/*
*----------------------------------------------------------------------
*
@@ -81,6 +79,7 @@ TkMacOSXDisplayChanged(Display *display)
{
GDHandle graphicsDevice;
Screen *screen;
+ Rect bounds = {0, 0, 0, 0}, *maxBounds;
if (display == NULL || display->screens == NULL) {
return;
@@ -88,15 +87,29 @@ TkMacOSXDisplayChanged(Display *display)
screen = display->screens;
graphicsDevice = GetMainDevice();
- screen->root_depth = (*(*graphicsDevice)->gdPMap)->cmpSize *
- (*(*graphicsDevice)->gdPMap)->cmpCount;
- screen->height = (*graphicsDevice)->gdRect.bottom -
+ screen->root_depth = (*(*graphicsDevice)->gdPMap)->cmpSize *
+ (*(*graphicsDevice)->gdPMap)->cmpCount;
+ screen->height = (*graphicsDevice)->gdRect.bottom -
(*graphicsDevice)->gdRect.top;
- screen->width = (*graphicsDevice)->gdRect.right -
+ screen->width = (*graphicsDevice)->gdRect.right -
(*graphicsDevice)->gdRect.left;
- screen->mwidth = (screen->width * 254 + 360) / 720;
- screen->mheight = (screen->height * 254 + 360) / 720;
+ screen->mwidth = (screen->width * 254 + 360) / 720;
+ screen->mheight = (screen->height * 254 + 360) / 720;
+
+ maxBounds = (Rect*) screen->ext_data;
+ *maxBounds = bounds;
+ graphicsDevice = GetDeviceList();
+ while (graphicsDevice) {
+ OSStatus err;
+
+ err = ChkErr(GetAvailableWindowPositioningBounds, graphicsDevice,
+ &bounds);
+ if (err == noErr) {
+ UnionRect(&bounds, maxBounds, maxBounds);
+ }
+ graphicsDevice = GetNextDevice(graphicsDevice);
+ }
}
/*
@@ -122,7 +135,8 @@ TkpOpenDisplay(
{
Display *display;
Screen *screen;
- int fd = 0;
+ int fd = 0;
+ static Rect maxBounds = {0, 0, 0, 0};
if (gMacDisplay != NULL) {
if (strcmp(gMacDisplay->display->display_name, display_name) == 0) {
@@ -131,7 +145,6 @@ TkpOpenDisplay(
return NULL;
}
}
- InitCursor();
display = (Display *) ckalloc(sizeof(Display));
screen = (Screen *) ckalloc(sizeof(Screen));
@@ -139,13 +152,13 @@ TkpOpenDisplay(
bzero(screen, sizeof(Screen));
display->resource_alloc = MacXIdAlloc;
- display->request = 0;
- display->qlen = 0;
- display->fd = fd;
- display->screens = screen;
- display->nscreens = 1;
+ display->request = 0;
+ display->qlen = 0;
+ display->fd = fd;
+ display->screens = screen;
+ display->nscreens = 1;
display->default_screen = 0;
- display->display_name = macScreenName;
+ display->display_name = (char*)macScreenName;
Gestalt(gestaltQuickdrawVersion, (long*)&display->proto_minor_version);
display->proto_major_version = 10;
@@ -156,14 +169,15 @@ TkpOpenDisplay(
/*
* These screen bits never change
*/
- screen->root = ROOT_ID;
- screen->display = display;
- screen->black_pixel = 0x00000000;
- screen->white_pixel = 0x00FFFFFF;
+ screen->root = ROOT_ID;
+ screen->display = display;
+ screen->black_pixel = 0x00000000 | PIXEL_MAGIC << 24;
+ screen->white_pixel = 0x00FFFFFF | PIXEL_MAGIC << 24;
+ screen->ext_data = (XExtData*) &maxBounds;
screen->root_visual = (Visual *) ckalloc(sizeof(Visual));
screen->root_visual->visualid = 0;
- screen->root_visual->class = TrueColor;
+ screen->root_visual->class = TrueColor;
screen->root_visual->red_mask = 0x00FF0000;
screen->root_visual->green_mask = 0x0000FF00;
screen->root_visual->blue_mask = 0x000000FF;
@@ -209,15 +223,15 @@ TkpCloseDisplay(
{
Display *display = displayPtr->display;
if (gMacDisplay != displayPtr) {
- Tcl_Panic("TkpCloseDisplay: tried to call TkpCloseDisplay on bad display");
+ Tcl_Panic("TkpCloseDisplay: tried to call TkpCloseDisplay on bad display");
}
gMacDisplay = NULL;
if (display->screens != (Screen *) NULL) {
- if (display->screens->root_visual != (Visual *) NULL) {
- ckfree((char *) display->screens->root_visual);
- }
- ckfree((char *) display->screens);
+ if (display->screens->root_visual != (Visual *) NULL) {
+ ckfree((char *) display->screens->root_visual);
+ }
+ ckfree((char *) display->screens);
}
ckfree((char *) display);
}
@@ -229,7 +243,7 @@ TkpCloseDisplay(
*
* This procedure is called to cleanup resources associated with
* claiming clipboard ownership and for receiving selection get
- * results. This function is called in tkWindow.c. This has to be
+ * results. This function is called in tkWindow.c. This has to be
* called by the display cleanup function because we still need the
* access display elements.
*
@@ -244,7 +258,7 @@ TkpCloseDisplay(
void
TkClipCleanup(dispPtr)
- TkDisplay *dispPtr; /* display associated with clipboard */
+ TkDisplay *dispPtr; /* display associated with clipboard */
{
/*
* Make sure that the local scrap is transfered to the global
@@ -329,7 +343,7 @@ TkpWindowWasRecentlyDeleted(
*
* DefaultErrorHandler --
*
- * This procedure is the default X error handler. Tk uses it's
+ * This procedure is the default X error handler. Tk uses it's
* own error handler so this call should never be called.
*
* Results:
@@ -347,7 +361,7 @@ DefaultErrorHandler(
XErrorEvent* err_evt)
{
/*
- * This call should never be called. Tk replaces
+ * This call should never be called. Tk replaces
* it with its own error handler.
*/
Tcl_Panic("Warning hit bogus error handler!");
@@ -394,45 +408,45 @@ XGetImage(display, d, x, y, width, height, plane_mask, format)
unsigned int height;
unsigned long plane_mask;
int format;
-{
+{
XImage * imagePtr = NULL;
Pixmap pixmap = (Pixmap) NULL;
Tk_Window win = (Tk_Window) ((MacDrawable *) d)->winPtr;
- GC gc;
- int depth = 32;
- int offset = 0;
- int bitmap_pad = 32;
- int bytes_per_line = 0;
-
+ GC gc;
+ int depth = 32;
+ int offset = 0;
+ int bitmap_pad = 32;
+ int bytes_per_line = 0;
+
if (TkMacOSXGetDrawablePort(d)) {
- if (format == ZPixmap) {
- if (width > 0 && height > 0) {
- /* Tk_GetPixmap fails for zero width or height */
- pixmap = Tk_GetPixmap(display, d, width, height, depth);
- }
- if (win) {
- XGCValues values;
- gc = Tk_GetGC(win, 0, &values);
- } else {
- gc = XCreateGC(display, pixmap, 0, NULL);
- }
- if (pixmap) {
- XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0);
- }
- imagePtr = XCreateImage(display, NULL, depth, format, offset,
- (char*)TkMacOSXGetDrawablePort(pixmap),
- width, height, bitmap_pad, bytes_per_line);
- /* Track Pixmap underlying the XImage in the unused obdata field *
- * so that we can treat XImages coming from XGetImage specially. */
- imagePtr->obdata = (XPointer) pixmap;
- if (!win) {
- XFreeGC(display, gc);
- }
- } else {
- TkpDisplayWarning(
- "XGetImage: only ZPixmap types are implemented",
- "XGetImage Failure");
- }
+ if (format == ZPixmap) {
+ if (width > 0 && height > 0) {
+ /* Tk_GetPixmap fails for zero width or height */
+ pixmap = Tk_GetPixmap(display, d, width, height, depth);
+ }
+ if (win) {
+ XGCValues values;
+ gc = Tk_GetGC(win, 0, &values);
+ } else {
+ gc = XCreateGC(display, pixmap, 0, NULL);
+ }
+ if (pixmap) {
+ XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0);
+ }
+ imagePtr = XCreateImage(display, NULL, depth, format, offset,
+ (char*)TkMacOSXGetDrawablePort(pixmap),
+ width, height, bitmap_pad, bytes_per_line);
+ /* Track Pixmap underlying the XImage in the unused obdata field *
+ * so that we can treat XImages coming from XGetImage specially. */
+ imagePtr->obdata = (XPointer) pixmap;
+ if (!win) {
+ XFreeGC(display, gc);
+ }
+ } else {
+ TkpDisplayWarning(
+ "XGetImage: only ZPixmap types are implemented",
+ "XGetImage Failure");
+ }
}
return imagePtr;
}
@@ -460,17 +474,18 @@ XGetGeometry(display, d, root_return, x_return, y_return, width_return,
*width_return = Tk_Width(winPtr);
*height_return = Tk_Height(winPtr);
*border_width_return = winPtr->changes.border_width;
- *depth_return = Tk_Depth(winPtr);
+ *depth_return = Tk_Depth(winPtr);
} else {
Rect boundsRect;
CGrafPtr destPort = TkMacOSXGetDrawablePort(d);
- GetPortBounds(destPort,&boundsRect);
+
+ GetPortBounds(destPort, &boundsRect);
*x_return = boundsRect.left;
*y_return = boundsRect.top;
*width_return = boundsRect.right - boundsRect.left;
*height_return = boundsRect.bottom - boundsRect.top;
- *border_width_return = 0;
- *depth_return = 32;
+ *border_width_return = 0;
+ *depth_return = 32;
}
return 1;
}
@@ -514,23 +529,23 @@ XSetWMNormalHints(
XSizeHints* hints)
{
/*
- * Do nothing. Shouldn't even be called.
+ * Do nothing. Shouldn't even be called.
*/
}
XSizeHints *
-XAllocSizeHints()
+XAllocSizeHints(void)
{
/*
- * Always return NULL. Tk code checks to see if NULL
+ * Always return NULL. Tk code checks to see if NULL
* is returned & does nothing if it is.
*/
-
+
return NULL;
}
#endif
-XImage *
+XImage *
XCreateImage(
Display* display,
Visual* visual,
@@ -542,7 +557,7 @@ XCreateImage(
unsigned int height,
int bitmap_pad,
int bytes_per_line)
-{
+{
XImage *ximage;
display->request++;
@@ -658,15 +673,15 @@ XQueryColor(
unsigned char r, g, b;
XColor *d = def_in_out;
- p = d->pixel;
- r = (p & 0x00FF0000) >> 16;
- g = (p & 0x0000FF00) >> 8;
- b = (p & 0x000000FF);
- d->red = (r << 8) | r;
+ p = d->pixel;
+ r = (p & 0x00FF0000) >> 16;
+ g = (p & 0x0000FF00) >> 8;
+ b = (p & 0x000000FF);
+ d->red = (r << 8) | r;
d->green = (g << 8) | g;
- d->blue = (b << 8) | b;
+ d->blue = (b << 8) | b;
d->flags = DoRed|DoGreen|DoBlue;
- d->pad = 0;
+ d->pad = 0;
}
void
@@ -682,21 +697,21 @@ XQueryColors(
XColor *d = defs_in_out;
for (i = 0; i < ncolors; i++, d++) {
- p = d->pixel;
- r = (p & 0x00FF0000) >> 16;
- g = (p & 0x0000FF00) >> 8;
- b = (p & 0x000000FF);
- d->red = (r << 8) | r;
+ p = d->pixel;
+ r = (p & 0x00FF0000) >> 16;
+ g = (p & 0x0000FF00) >> 8;
+ b = (p & 0x000000FF);
+ d->red = (r << 8) | r;
d->green = (g << 8) | g;
- d->blue = (b << 8) | b;
+ d->blue = (b << 8) | b;
d->flags = DoRed|DoGreen|DoBlue;
- d->pad = 0;
+ d->pad = 0;
}
}
-int
+int
XQueryTree(display, w, root_return, parent_return, children_return,
- nchildren_return)
+ nchildren_return)
Display* display;
Window w;
Window* root_return;
@@ -737,7 +752,7 @@ XRefreshKeyboardMapping( XMappingEvent* x)
Debugger();
}
-void
+void
XSetIconName(
Display* display,
Window w,
@@ -749,15 +764,15 @@ XSetIconName(
display->request++;
}
-void
+void
XForceScreenSaver(
Display* display,
int mode)
{
- /*
- * This function is just a no-op. It is defined to
- * reset the screen saver. However, there is no real
- * way to do this on a Mac. Let me know if there is!
+ /*
+ * This function is just a no-op. It is defined to
+ * reset the screen saver. However, there is no real
+ * way to do this on a Mac. Let me know if there is!
*/
display->request++;
}
@@ -784,7 +799,7 @@ XSync (Display *display, Bool flag)
* TkGetServerInfo --
*
* Given a window, this procedure returns information about
- * the window server for that window. This procedure provides
+ * the window server for that window. This procedure provides
* the guts of the "winfo server" command.
*
* Results:
@@ -800,7 +815,7 @@ void
TkGetServerInfo(
Tcl_Interp *interp, /* The server information is returned in
* this interpreter's result. */
- Tk_Window tkwin) /* Token for window; this selects a
+ Tk_Window tkwin) /* Token for window; this selects a
* particular display and server. */
{
char buffer[8 + TCL_INTEGER_SPACE * 2];
@@ -810,77 +825,83 @@ TkGetServerInfo(
ProtocolRevision(Tk_Display(tkwin)));
sprintf(buffer2, " %x", VendorRelease(Tk_Display(tkwin)));
Tcl_AppendResult(interp, buffer, ServerVendor(Tk_Display(tkwin)),
- buffer2, (char *) NULL);
+ buffer2, NULL);
}
/*
- * Image stuff
+ * Image stuff
*/
-static int
+static int
TkMacOSXXDestroyImage(
XImage *image)
{
if (image->obdata)
- Tk_FreePixmap((Display*)gMacDisplay,(Pixmap)image->obdata);
+ Tk_FreePixmap((Display*)gMacDisplay,(Pixmap)image->obdata);
return 0;
}
-static unsigned long
+static unsigned long
TkMacOSXXGetPixel(
XImage *image,
int x,
int y)
{
- CGrafPtr grafPtr, oldPort;
+ CGrafPtr destPort, savePort;
+ Boolean portChanged;
RGBColor cPix;
unsigned long r, g, b, c;
- grafPtr = (CGrafPtr)image->data;
- GetPort(&oldPort);
- SetPort(grafPtr);
- GetCPixel(x,y,&cPix);
+
+ destPort = (CGrafPtr)image->data;
+ portChanged = QDSwapPort(destPort, &savePort);
+ GetCPixel(x, y, &cPix);
if (image->obdata) {
- /* Image from XGetImage, 16 bit color values */
- r = (cPix . red) >> 8;
- g = (cPix . green) >> 8;
- b = (cPix . blue) >> 8;
+ /* Image from XGetImage, 16 bit color values */
+ r = (cPix . red) >> 8;
+ g = (cPix . green) >> 8;
+ b = (cPix . blue) >> 8;
} else {
- r = cPix . red;
- g = cPix . green;
- b = cPix . blue;
+ r = cPix . red;
+ g = cPix . green;
+ b = cPix . blue;
}
c = (r<<16)|(g<<8)|(b);
- SetPort(oldPort);
+ if (portChanged) {
+ QDSwapPort(savePort, NULL);
+ }
return c;
}
-static int
+static int
TkMacOSXXPutPixel(
XImage *image,
int x,
int y,
unsigned long pixel)
{
- CGrafPtr grafPtr, oldPort;
+ CGrafPtr destPort, savePort;
+ Boolean portChanged;
RGBColor cPix;
unsigned long r, g, b;
- grafPtr = (CGrafPtr)image->data;
- GetPort(&oldPort);
- SetPort(grafPtr);
+
+ destPort = (CGrafPtr)image->data;
+ portChanged = QDSwapPort(destPort, &savePort);
r = (pixel & image->red_mask)>>16;
g = (pixel & image->green_mask)>>8;
b = (pixel & image->blue_mask);
if (image->obdata) {
- /* Image from XGetImage, 16 bit color values */
- cPix . red = r << 8;
- cPix . green = g << 8;
- cPix . blue = b << 8;
+ /* Image from XGetImage, 16 bit color values */
+ cPix . red = r << 8;
+ cPix . green = g << 8;
+ cPix . blue = b << 8;
} else {
- cPix . red = r;
- cPix . green = g;
- cPix . blue = b;
+ cPix . red = r;
+ cPix . green = g;
+ cPix . blue = b;
+ }
+ SetCPixel(x, y, &cPix);
+ if (portChanged) {
+ QDSwapPort(savePort, NULL);
}
- SetCPixel(x,y,&cPix);
- SetPort(oldPort);
return 0;
}
@@ -896,7 +917,7 @@ TkMacOSXXSubImage(
return NULL;
}
-static int
+static int
TkMacOSXXAddPixel(
XImage *image,
long value)
@@ -912,7 +933,7 @@ TkMacOSXXAddPixel(
* XSetWindowBackgroundPixmap, XSetWindowBorder, XSetWindowBorderPixmap,
* XSetWindowBorderWidth, XSetWindowColormap
*
- * These functions are all no-ops. They all have equivilent
+ * These functions are all no-ops. They all have equivilent
* Tk calls that should always be used instead.
*
* Results:
@@ -933,7 +954,7 @@ XChangeWindowAttributes(
{
}
-void
+void
XSetWindowBackground(
Display *display,
Window window,
@@ -984,8 +1005,8 @@ XSetWindowColormap(
Status
XStringListToTextProperty(
- char** list,
- int count,
+ char** list,
+ int count,
XTextProperty* text_prop_return)
{
Debugger();
@@ -993,8 +1014,8 @@ XStringListToTextProperty(
}
void
XSetWMClientMachine(
- Display* display,
- Window w,
+ Display* display,
+ Window w,
XTextProperty* text_prop)
{
Debugger();