Merge branch 'master' of git://anongit.freedesktop.org/git/xorg/xserver into upstream-experimental

This commit is contained in:
Drew Parsons 2008-05-10 00:01:15 +10:00 committed by Drew Parsons
commit 7b3066d9b9
294 changed files with 3129 additions and 1037 deletions

5
.gitignore vendored
View File

@ -278,8 +278,9 @@ hw/xprint/doc/Xprt.1x
hw/xprint/doc/Xprt.man hw/xprint/doc/Xprt.man
hw/xprint/dpmsstubs-wrapper.c hw/xprint/dpmsstubs-wrapper.c
hw/xprint/miinitext-wrapper.c hw/xprint/miinitext-wrapper.c
hw/xquartz/xpr/Xquartz hw/xquartz/mach-startup/X11
hw/xquartz/xpr/Xquartz.1 hw/xquartz/mach-startup/Xquartz
hw/xquartz/doc/Xquartz.1
include/dix-config.h include/dix-config.h
include/kdrive-config.h include/kdrive-config.h
include/xgl-config.h include/xgl-config.h

View File

@ -7,4 +7,5 @@ libcomposite_la_SOURCES = \
compext.c \ compext.c \
compint.h \ compint.h \
compinit.c \ compinit.c \
compoverlay.c \
compwindow.c compwindow.c

View File

@ -54,10 +54,7 @@ static CARD8 CompositeReqCode;
static DevPrivateKey CompositeClientPrivateKey = &CompositeClientPrivateKey; static DevPrivateKey CompositeClientPrivateKey = &CompositeClientPrivateKey;
RESTYPE CompositeClientWindowType; RESTYPE CompositeClientWindowType;
RESTYPE CompositeClientSubwindowsType; RESTYPE CompositeClientSubwindowsType;
static RESTYPE CompositeClientOverlayType; RESTYPE CompositeClientOverlayType;
static void deleteCompOverlayClient (CompOverlayClientPtr pOcToDel,
ScreenPtr pScreen);
typedef struct _CompositeClient { typedef struct _CompositeClient {
int major_version; int major_version;
@ -107,19 +104,8 @@ static int
FreeCompositeClientOverlay (pointer value, XID ccwid) FreeCompositeClientOverlay (pointer value, XID ccwid)
{ {
CompOverlayClientPtr pOc = (CompOverlayClientPtr) value; CompOverlayClientPtr pOc = (CompOverlayClientPtr) value;
ScreenPtr pScreen = pOc->pScreen;
CompScreenPtr cs;
deleteCompOverlayClient(pOc, pScreen);
/* Unmap overlay window when there are no more clients using it */
cs = GetCompScreen(pScreen);
if (cs->pOverlayClients == NULL) {
if (cs->pOverlayWin != NULL) {
UnmapWindow(cs->pOverlayWin, FALSE);
}
}
compFreeOverlayClient (pOc);
return Success; return Success;
} }
@ -304,137 +290,6 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
} }
/*
* Routines for manipulating the per-screen overlay clients list.
* This list indicates which clients have called GetOverlayWindow
* for this screen.
*/
/* Return the screen's overlay client list element for the given client */
static CompOverlayClientPtr
findCompOverlayClient (ClientPtr pClient, ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc;
for (pOc = cs->pOverlayClients; pOc != NULL; pOc = pOc->pNext) {
if (pOc->pClient == pClient) {
return pOc;
}
}
return NULL;
}
static int
createCompOverlayClient (ClientPtr pClient, ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc;
pOc = (CompOverlayClientPtr) xalloc(sizeof(CompOverlayClientRec));
if (pOc == NULL) {
return BadAlloc;
}
pOc->pClient = pClient;
pOc->pScreen = pScreen;
pOc->resource = FakeClientID(pClient->index);
pOc->pNext = cs->pOverlayClients;
cs->pOverlayClients = pOc;
/*
* Create a resource for this element so it can be deleted
* when the client goes away.
*/
if (!AddResource (pOc->resource, CompositeClientOverlayType,
(pointer) pOc)) {
xfree(pOc);
return BadAlloc;
}
return Success;
}
/*
* Delete the given overlay client list element from its screen list.
*/
static void
deleteCompOverlayClient (CompOverlayClientPtr pOcToDel, ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc, pNext;
CompOverlayClientPtr pOcLast = NULL;
pOc = cs->pOverlayClients;
while (pOc != NULL) {
pNext = pOc->pNext;
if (pOc == pOcToDel) {
xfree(pOc);
if (pOcLast == NULL) {
cs->pOverlayClients = pNext;
} else {
pOcLast->pNext = pNext;
}
break;
}
pOcLast = pOc;
pOc = pNext;
}
}
/*
* Delete all the hide-counts list elements for this screen.
*/
void
deleteCompOverlayClientsForScreen (ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc, pTmp;
pOc = cs->pOverlayClients;
while (pOc != NULL) {
pTmp = pOc->pNext;
FreeResource(pOc->resource, 0);
pOc = pTmp;
}
cs->pOverlayClients = NULL;
}
/*
** If necessary, create the overlay window. And map it
** Note: I found it excessively difficult to destroy this window
** during compCloseScreen; DeleteWindow can't be called because
** the input devices are already shut down. So we are going to
** just allocate an overlay window once per screen per X server
** invocation.
*/
static WindowPtr
createOverlayWindow (ScreenPtr pScreen)
{
int wid = FakeClientID(0);
WindowPtr pWin;
XID overrideRedirect = TRUE;
int result;
pWin = CreateWindow (
wid, WindowTable[pScreen->myNum],
0, 0, pScreen->width, pScreen->height, 0,
InputOutput, CWOverrideRedirect, &overrideRedirect,
WindowTable[pScreen->myNum]->drawable.depth,
serverClient, pScreen->rootVisual, &result);
if (pWin == NULL) {
return NULL;
}
if (!AddResource(wid, RT_WINDOW, (pointer)pWin)) {
DeleteWindow(pWin, None);
return NULL;
}
return pWin;
}
static int static int
ProcCompositeGetOverlayWindow (ClientPtr client) ProcCompositeGetOverlayWindow (ClientPtr client)
{ {
@ -456,28 +311,31 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
} }
pScreen = pWin->drawable.pScreen; pScreen = pWin->drawable.pScreen;
cs = GetCompScreen(pScreen); /*
if (cs->pOverlayWin == NULL) { * Create an OverlayClient structure to mark this client's
cs->pOverlayWin = createOverlayWindow(pScreen); * interest in the overlay window
if (cs->pOverlayWin == NULL) { */
pOc = compCreateOverlayClient(pScreen, client);
if (pOc == NULL)
return BadAlloc;
/*
* Make sure the overlay window exists
*/
cs = GetCompScreen(pScreen);
if (cs->pOverlayWin == NULL)
if (!compCreateOverlayWindow(pScreen))
{
FreeResource (pOc->resource, RT_NONE);
return BadAlloc; return BadAlloc;
}
} }
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cs->pOverlayWin->drawable.id, rc = XaceHook(XACE_RESOURCE_ACCESS, client, cs->pOverlayWin->drawable.id,
RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, DixGetAttrAccess); RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, DixGetAttrAccess);
if (rc != Success) if (rc != Success)
{
FreeResource (pOc->resource, RT_NONE);
return rc; return rc;
MapWindow(cs->pOverlayWin, serverClient);
/* Record that client is using this overlay window */
pOc = findCompOverlayClient(client, pScreen);
if (pOc == NULL) {
int ret = createCompOverlayClient(client, pScreen);
if (ret != Success) {
return ret;
}
} }
rep.type = X_Reply; rep.type = X_Reply;
@ -504,7 +362,6 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client)
WindowPtr pWin; WindowPtr pWin;
ScreenPtr pScreen; ScreenPtr pScreen;
CompOverlayClientPtr pOc; CompOverlayClientPtr pOc;
CompScreenPtr cs;
REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq); REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq);
pWin = (WindowPtr) LookupIDByType (stuff->window, RT_WINDOW); pWin = (WindowPtr) LookupIDByType (stuff->window, RT_WINDOW);
@ -519,18 +376,12 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client)
* Has client queried a reference to the overlay window * Has client queried a reference to the overlay window
* on this screen? If not, generate an error. * on this screen? If not, generate an error.
*/ */
pOc = findCompOverlayClient(client, pWin->drawable.pScreen); pOc = compFindOverlayClient (pWin->drawable.pScreen, client);
if (pOc == NULL) { if (pOc == NULL)
return BadMatch; return BadMatch;
}
/* The delete function will free the client structure */ /* The delete function will free the client structure */
FreeResource (pOc->resource, 0); FreeResource (pOc->resource, RT_NONE);
cs = GetCompScreen(pScreen);
if (cs->pOverlayClients == NULL) {
UnmapWindow(cs->pOverlayWin, FALSE);
}
return client->noClientException; return client->noClientException;
} }

View File

@ -76,14 +76,6 @@ compCloseScreen (int index, ScreenPtr pScreen)
pScreen->CopyWindow = cs->CopyWindow; pScreen->CopyWindow = cs->CopyWindow;
pScreen->PositionWindow = cs->PositionWindow; pScreen->PositionWindow = cs->PositionWindow;
deleteCompOverlayClientsForScreen(pScreen);
/*
** Note: no need to call DeleteWindow; the server has
** already destroyed it.
*/
cs->pOverlayWin = NULL;
xfree (cs); xfree (cs);
dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL); dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL);
ret = (*pScreen->CloseScreen) (index, pScreen); ret = (*pScreen->CloseScreen) (index, pScreen);
@ -122,11 +114,11 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
if (ret && (mask & CWBackingStore)) { if (ret && (mask & CWBackingStore)) {
if (pWin->backingStore != NotUseful) { if (pWin->backingStore != NotUseful) {
compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic);
pWin->backStorage = TRUE; pWin->backStorage = (pointer) (intptr_t) 1;
} else { } else {
compUnredirectWindow(serverClient, pWin, compUnredirectWindow(serverClient, pWin,
CompositeRedirectAutomatic); CompositeRedirectAutomatic);
pWin->backStorage = FALSE; pWin->backStorage = NULL;
} }
} }
@ -380,6 +372,7 @@ compScreenInit (ScreenPtr pScreen)
return FALSE; return FALSE;
cs->damaged = FALSE; cs->damaged = FALSE;
cs->overlayWid = FakeClientID(0);
cs->pOverlayWin = NULL; cs->pOverlayWin = NULL;
cs->pOverlayClients = NULL; cs->pOverlayClients = NULL;

View File

@ -155,6 +155,7 @@ typedef struct _CompScreen {
VisualID *alternateVisuals; VisualID *alternateVisuals;
WindowPtr pOverlayWin; WindowPtr pOverlayWin;
Window overlayWid;
CompOverlayClientPtr pOverlayClients; CompOverlayClientPtr pOverlayClients;
} CompScreenRec, *CompScreenPtr; } CompScreenRec, *CompScreenPtr;
@ -172,6 +173,7 @@ extern DevPrivateKey CompSubwindowsPrivateKey;
extern RESTYPE CompositeClientWindowType; extern RESTYPE CompositeClientWindowType;
extern RESTYPE CompositeClientSubwindowsType; extern RESTYPE CompositeClientSubwindowsType;
extern RESTYPE CompositeClientOverlayType;
/* /*
* compalloc.c * compalloc.c
@ -229,6 +231,25 @@ CompositeRegisterAlternateVisuals (ScreenPtr pScreen,
Bool Bool
compScreenInit (ScreenPtr pScreen); compScreenInit (ScreenPtr pScreen);
/*
* compoverlay.c
*/
void
compFreeOverlayClient (CompOverlayClientPtr pOcToDel);
CompOverlayClientPtr
compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
CompOverlayClientPtr
compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
Bool
compCreateOverlayWindow (ScreenPtr pScreen);
void
compDestroyOverlayWindow (ScreenPtr pScreen);
/* /*
* compwindow.c * compwindow.c
*/ */
@ -292,9 +313,6 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
void void
compWindowUpdate (WindowPtr pWin); compWindowUpdate (WindowPtr pWin);
void
deleteCompOverlayClientsForScreen (ScreenPtr pScreen);
WindowPtr WindowPtr
CompositeRealChildHead (WindowPtr pWin); CompositeRealChildHead (WindowPtr pWin);

159
composite/compoverlay.c Normal file
View File

@ -0,0 +1,159 @@
/*
* Copyright © 2006 Sun Microsystems
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Sun Microsystems not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Sun Microsystems makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* Copyright © 2003 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Keith Packard not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Keith Packard makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include "compint.h"
#include "xace.h"
/*
* Delete the given overlay client list element from its screen list.
*/
void
compFreeOverlayClient (CompOverlayClientPtr pOcToDel)
{
ScreenPtr pScreen = pOcToDel->pScreen;
CompScreenPtr cs = GetCompScreen (pScreen);
CompOverlayClientPtr *pPrev, pOc;
for (pPrev = &cs->pOverlayClients; (pOc = *pPrev); pPrev = &pOc->pNext)
{
if (pOc == pOcToDel) {
*pPrev = pOc->pNext;
xfree (pOc);
break;
}
}
/* Destroy overlay window when there are no more clients using it */
if (cs->pOverlayClients == NULL)
compDestroyOverlayWindow (pScreen);
}
/*
* Return the client's first overlay client rec from the given screen
*/
CompOverlayClientPtr
compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc;
for (pOc = cs->pOverlayClients; pOc != NULL; pOc = pOc->pNext)
if (pOc->pClient == pClient)
return pOc;
return NULL;
}
/*
* Create an overlay client object for the given client
*/
CompOverlayClientPtr
compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient)
{
CompScreenPtr cs = GetCompScreen(pScreen);
CompOverlayClientPtr pOc;
pOc = (CompOverlayClientPtr) xalloc(sizeof(CompOverlayClientRec));
if (pOc == NULL)
return NULL;
pOc->pClient = pClient;
pOc->pScreen = pScreen;
pOc->resource = FakeClientID(pClient->index);
pOc->pNext = cs->pOverlayClients;
cs->pOverlayClients = pOc;
/*
* Create a resource for this element so it can be deleted
* when the client goes away.
*/
if (!AddResource (pOc->resource, CompositeClientOverlayType, (pointer) pOc))
return NULL;
return pOc;
}
/*
* Create the overlay window and map it
*/
Bool
compCreateOverlayWindow (ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
WindowPtr pRoot = WindowTable[pScreen->myNum];
WindowPtr pWin;
XID overrideRedirect = TRUE;
int result;
pWin = cs->pOverlayWin =
CreateWindow (cs->overlayWid, pRoot,
0, 0, pScreen->width, pScreen->height, 0,
InputOutput, CWOverrideRedirect, &overrideRedirect,
pRoot->drawable.depth,
serverClient, pScreen->rootVisual, &result);
if (pWin == NULL)
return FALSE;
if (!AddResource(pWin->drawable.id, RT_WINDOW, (pointer)pWin))
return FALSE;
MapWindow(pWin, serverClient);
return TRUE;
}
/*
* Destroy the overlay window
*/
void
compDestroyOverlayWindow (ScreenPtr pScreen)
{
CompScreenPtr cs = GetCompScreen(pScreen);
cs->pOverlayWin = NullWindow;
FreeResource (cs->overlayWid, RT_NONE);
}

View File

@ -48,6 +48,15 @@ struct config_hal_info {
LibHalContext *hal_ctx; LibHalContext *hal_ctx;
}; };
/* Used for special handling of xkb options. */
struct xkb_options {
char* layout;
char* model;
char* rules;
char* variant;
};
static void static void
remove_device(DeviceIntPtr dev) remove_device(DeviceIntPtr dev)
{ {
@ -164,10 +173,11 @@ device_added(LibHalContext *hal_ctx, const char *udi)
InputOption *options = NULL, *tmpo = NULL; InputOption *options = NULL, *tmpo = NULL;
DeviceIntPtr dev; DeviceIntPtr dev;
DBusError error; DBusError error;
struct xkb_options xkb_opts = {0};
LibHalPropertySet *set = NULL; LibHalPropertySet *set = NULL;
LibHalPropertySetIterator set_iter; LibHalPropertySetIterator set_iter;
char *psi_key = NULL, *tmp_val, *tmp_key; char *psi_key = NULL, *tmp_val;
dbus_error_init(&error); dbus_error_init(&error);
@ -241,27 +251,71 @@ device_added(LibHalContext *hal_ctx, const char *udi)
tmp_val = get_prop_string(hal_ctx, udi, psi_key); tmp_val = get_prop_string(hal_ctx, udi, psi_key);
if (tmp_val){ if (tmp_val){
char* tmp;
/* xkb needs special handling. HAL specs include
* input.xkb.xyz options, but the x11-input.fdi specifies
* input.x11_options.Xkbxyz options. By default, we use
* the former, unless the specific X11 ones are specified.
* Since we can't predict the order in which the keys
* arrive, we need to store them.
*/
if ((tmp = strcasestr(psi_key, "xkb")))
{
if (!strcasecmp(&tmp[3], "layout"))
{
if (xkb_opts.layout)
xfree(xkb_opts.layout);
xkb_opts.layout = strdup(tmp_val);
} else if (!strcasecmp(&tmp[3], "model"))
{
if (xkb_opts.model)
xfree(xkb_opts.model);
xkb_opts.model = strdup(tmp_val);
} else if (!strcasecmp(&tmp[3], "rules"))
{
if (xkb_opts.rules)
xfree(xkb_opts.rules);
xkb_opts.rules = strdup(tmp_val);
} else if (!strcasecmp(&tmp[3], "variant"))
{
if (xkb_opts.variant)
xfree(xkb_opts.variant);
xkb_opts.variant = strdup(tmp_val);
}
} else
{
/* all others */
add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val); add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val);
xfree(tmp_val); xfree(tmp_val);
} }
}
/* evdev's XKB options... we should probably depreciate this usage */
} else if (!strncasecmp(psi_key, LIBHAL_XKB_PROP_KEY, sizeof(LIBHAL_XKB_PROP_KEY)-1)){ } else if (!strncasecmp(psi_key, LIBHAL_XKB_PROP_KEY, sizeof(LIBHAL_XKB_PROP_KEY)-1)){
/* only support strings for all values */ /* only support strings for all values */
tmp_val = get_prop_string(hal_ctx, udi, psi_key); tmp_val = get_prop_string(hal_ctx, udi, psi_key);
if (tmp_val){ if (tmp_val){
/* add "xkb_" + NULL */ char* tmp;
tmp_key = xalloc(strlen(psi_key) - ( sizeof(LIBHAL_XKB_PROP_KEY) - 1) + 5);
if (!tmp_key){ tmp = &psi_key[sizeof(LIBHAL_XKB_PROP_KEY) - 1];
LogMessage(X_ERROR, "config/hal: couldn't allocate memory for option %s\n", psi_key);
} else {
sprintf(tmp_key, "xkb_%s", psi_key + sizeof(LIBHAL_XKB_PROP_KEY)-1);
add_option(&options, tmp_key, tmp_val);
xfree(tmp_key); if (!strcasecmp(tmp, "layout"))
{
if (!xkb_opts.layout)
xkb_opts.layout = strdup(tmp_val);
} else if (!strcasecmp(tmp, "rules"))
{
if (!xkb_opts.rules)
xkb_opts.rules = strdup(tmp_val);
} else if (!strcasecmp(tmp, "variant"))
{
if (!xkb_opts.variant)
xkb_opts.variant = strdup(tmp_val);
} else if (!strcasecmp(tmp, "model"))
{
if (!xkb_opts.model)
xkb_opts.model = strdup(tmp_val);
} }
xfree(tmp_val); xfree(tmp_val);
} }
@ -272,6 +326,17 @@ device_added(LibHalContext *hal_ctx, const char *udi)
libhal_psi_next(&set_iter); libhal_psi_next(&set_iter);
} }
/* Now add xkb options */
if (xkb_opts.layout)
add_option(&options, "xkb_layout", xkb_opts.layout);
if (xkb_opts.rules)
add_option(&options, "xkb_rules", xkb_opts.rules);
if (xkb_opts.variant)
add_option(&options, "xkb_variant", xkb_opts.variant);
if (xkb_opts.model)
add_option(&options, "xkb_model", xkb_opts.model);
/* this isn't an error, but how else do you output something that the user can see? */ /* this isn't an error, but how else do you output something that the user can see? */
LogMessage(X_INFO, "config/hal: Adding input device %s\n", name); LogMessage(X_INFO, "config/hal: Adding input device %s\n", name);
if (NewInputDeviceRequest(options, &dev) != Success) { if (NewInputDeviceRequest(options, &dev) != Success) {
@ -304,6 +369,15 @@ unwind:
xfree(tmpo); xfree(tmpo);
} }
if (xkb_opts.layout)
xfree(xkb_opts.layout);
if (xkb_opts.rules)
xfree(xkb_opts.rules);
if (xkb_opts.model)
xfree(xkb_opts.model);
if (xkb_opts.variant)
xfree(xkb_opts.variant);
dbus_error_free(&error); dbus_error_free(&error);
return; return;

View File

@ -402,6 +402,9 @@ case $host_os in
*solaris*) *solaris*)
PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no) PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
;; ;;
darwin*)
AC_DEFINE(CSRG_BASED, 1, [System is BSD-like])
;;
esac esac
AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes) AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes)
@ -562,9 +565,6 @@ AC_ARG_ENABLE(dmx, AS_HELP_STRING([--enable-dmx], [Build DMX server (d
AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes]) AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto]) AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto])
AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
AC_ARG_ENABLE(x11app, AS_HELP_STRING([--enable-x11app], [Build Apple's X11.app for Xquartz (default: auto)]), [X11APP=$enableval], [X11APP=auto])
AC_ARG_WITH(x11app-archs, AS_HELP_STRING([--with-x11app-archs=ARCHS], [Architectures to build X11.app for, space delimeted (default: "ppc i386")]), [X11APP_ARCHS=$enableval], [X11APP_ARCHS="ppc i386"])
AC_SUBST([X11APP_ARCHS])
AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
AC_ARG_ENABLE(xprint, AS_HELP_STRING([--enable-xprint], [Build Xprint extension and server (default: no)]), [XPRINT=$enableval], [XPRINT=no]) AC_ARG_ENABLE(xprint, AS_HELP_STRING([--enable-xprint], [Build Xprint extension and server (default: no)]), [XPRINT=$enableval], [XPRINT=no])
AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no]) AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no])
@ -1140,15 +1140,25 @@ PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
# OpenSSL used for SHA1 hashing in render/glyph.c, but we don't need all of # OpenSSL used for SHA1 hashing in render/glyph.c, but we don't need all of
# the OpenSSL libraries, just libcrypto # the OpenSSL libraries, just libcrypto
# Some systems have matching functionality in the smaller/simpler libmd
# Builders who want to force a choice can set SHA1_LIB and SHA1_CFLAGS
if test "x$SHA1_LIB" = "x" ; then
AC_CHECK_LIB([md], [SHA1Init], [SHA1_LIB="-lmd"
AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
[Define to use libmd SHA1 functions instead of OpenSSL libcrypto])])
fi
if test "x$SHA1_LIB" = "x" ; then
PKG_CHECK_EXISTS([openssl], PKG_CHECK_EXISTS([openssl],
[PKG_CHECK_MODULES([OPENSSL], [openssl], [PKG_CHECK_MODULES([OPENSSL], [openssl],
[OPENSSL_LIB_FLAGS=`$PKG_CONFIG --libs-only-L --libs-only-other openssl`])]) [OPENSSL_LIB_FLAGS=`$PKG_CONFIG --libs-only-L --libs-only-other openssl`])])
LIBCRYPTO="$OPENSSL_LIB_FLAGS -lcrypto" SHA1_LIB="$OPENSSL_LIB_FLAGS -lcrypto"
SHA1_CFLAGS="$OPENSSL_CFLAGS"
fi
# Autotools has some unfortunate issues with library handling. In order to # Autotools has some unfortunate issues with library handling. In order to
# get a server to rebuild when a dependency in the tree is changed, it must # get a server to rebuild when a dependency in the tree is changed, it must
# be listed in SERVERNAME_DEPENDENCIES. However, no system libraries may be # be listed in SERVERNAME_DEPENDENCIES. However, no system libraries may be
# listed there, or some versions of autotols will break (especially if a -L # listed there, or some versions of autotools will break (especially if a -L
# is required to find the library). So, we keep two sets of libraries # is required to find the library). So, we keep two sets of libraries
# detected: NAMESPACE_LIBS for in-tree libraries to be linked against, which # detected: NAMESPACE_LIBS for in-tree libraries to be linked against, which
# will go into the _DEPENDENCIES and _LDADD of the server, and # will go into the _DEPENDENCIES and _LDADD of the server, and
@ -1160,9 +1170,9 @@ LIBCRYPTO="$OPENSSL_LIB_FLAGS -lcrypto"
# XSERVER_SYS_LIBS is the set of out-of-tree libraries which all servers # XSERVER_SYS_LIBS is the set of out-of-tree libraries which all servers
# require. # require.
# #
XSERVER_CFLAGS="${XSERVERCFLAGS_CFLAGS} ${OPENSSL_CFLAGS}" XSERVER_CFLAGS="${XSERVERCFLAGS_CFLAGS} ${SHA1_CFLAGS}"
XSERVER_LIBS="$DIX_LIB $CONFIG_LIB $MI_LIB $OS_LIB" XSERVER_LIBS="$DIX_LIB $CONFIG_LIB $MI_LIB $OS_LIB"
XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${LIBCRYPTO}" XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${SHA1_LIB}"
AC_SUBST([XSERVER_LIBS]) AC_SUBST([XSERVER_LIBS])
AC_SUBST([XSERVER_SYS_LIBS]) AC_SUBST([XSERVER_SYS_LIBS])
@ -1756,17 +1766,6 @@ AM_CONDITIONAL(HAVE_XPLUGIN, [test "x$ac_cv_lib_Xplugin_xp_init" = xyes])
AM_CONDITIONAL(HAVE_AGL_FRAMEWORK, [test "x$xorg_cv_AGL_framework" = xyes]) AM_CONDITIONAL(HAVE_AGL_FRAMEWORK, [test "x$xorg_cv_AGL_framework" = xyes])
AM_CONDITIONAL(XQUARTZ, [test "x$XQUARTZ" = xyes]) AM_CONDITIONAL(XQUARTZ, [test "x$XQUARTZ" = xyes])
if test "x$X11APP" = xauto; then
AC_MSG_CHECKING([whether to build X11.app])
if test "x$XQUARTZ" = xyes ; then
X11APP=yes
else
X11APP=no
fi
AC_MSG_RESULT([$X11APP])
fi
AM_CONDITIONAL(X11APP,[test "X$X11APP" = Xyes])
if test "x$LAUNCHD" = "xauto"; then if test "x$LAUNCHD" = "xauto"; then
if test "x$XQUARTZ" = "xyes" ; then if test "x$XQUARTZ" = "xyes" ; then
LAUNCHD=yes LAUNCHD=yes
@ -2165,6 +2164,8 @@ hw/xwin/Makefile
hw/xquartz/Makefile hw/xquartz/Makefile
hw/xquartz/GL/Makefile hw/xquartz/GL/Makefile
hw/xquartz/bundle/Makefile hw/xquartz/bundle/Makefile
hw/xquartz/doc/Makefile
hw/xquartz/mach-startup/Makefile
hw/xquartz/xpr/Makefile hw/xquartz/xpr/Makefile
hw/kdrive/Makefile hw/kdrive/Makefile
hw/kdrive/ati/Makefile hw/kdrive/ati/Makefile

View File

@ -25,6 +25,7 @@ MODEDEFSOURCES = $(srcdir)/vesamodes $(srcdir)/extramodes
xf86DefModeSet.c: $(srcdir)/modeline2c.awk $(MODEDEFSOURCES) xf86DefModeSet.c: $(srcdir)/modeline2c.awk $(MODEDEFSOURCES)
cat $(MODEDEFSOURCES) | $(AWK) -f $(srcdir)/modeline2c.awk > $@ cat $(MODEDEFSOURCES) | $(AWK) -f $(srcdir)/modeline2c.awk > $@
echo >> $@
BUILT_SOURCES = xf86DefModeSet.c BUILT_SOURCES = xf86DefModeSet.c

View File

@ -363,7 +363,7 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
/* We only do seperate sync currently */ /* We only do seperate sync currently */
if (timing->sync != 0x03) { if (timing->sync != 0x03) {
xf86DrvMsg(scrnIndex, X_INFO, xf86DrvMsg(scrnIndex, X_INFO,
"%s: %dx%d Warning: We only handle seperate" "%s: %dx%d Warning: We only handle separate"
" sync.\n", __func__, timing->h_active, timing->v_active); " sync.\n", __func__, timing->h_active, timing->v_active);
} }

View File

@ -342,7 +342,9 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint)
if (!infoRec->offscreenDepthsInitialized) if (!infoRec->offscreenDepthsInitialized)
XAAInitializeOffscreenDepths (pScreen); XAAInitializeOffscreenDepths (pScreen);
if(pScrn->vtSema && (infoRec->offscreenDepths & (1 << (depth - 1))) && if(pScrn->vtSema &&
(usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) &&
(infoRec->offscreenDepths & (1 << (depth - 1))) &&
(size >= MIN_OFFPIX_SIZE) && !SwitchedOut && (size >= MIN_OFFPIX_SIZE) && !SwitchedOut &&
(!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) && (!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) &&
(!infoRec->maxOffPixHeight || (h <= infoRec->maxOffPixHeight)) ) (!infoRec->maxOffPixHeight || (h <= infoRec->maxOffPixHeight)) )

View File

@ -588,150 +588,6 @@ XAADoGlyphs (CARD8 op,
IS_OFFSCREEN_PIXMAP(pSrc->pDrawable)) IS_OFFSCREEN_PIXMAP(pSrc->pDrawable))
return FALSE; return FALSE;
if(maskFormat && (maskFormat->depth == 1) &&
(pSrc->pDrawable->width == 1) && (pSrc->pDrawable->height == 1) &&
(op == PictOpOver) && infoRec->WriteBitmap &&
!(infoRec->WriteBitmapFlags & NO_TRANSPARENCY))
{
CARD16 red, green, blue, alpha;
CARD32 pixel =
*((CARD32*)(((PixmapPtr)(pSrc->pDrawable))->devPrivate.ptr));
CARD32 *bits, *pntr, *pnt;
int x, y, i, n, left, top, right, bottom, width, height, pitch;
int L, T, R, B, X, Y, h, w, dwords, row, column, nbox;
int leftEdge, rightEdge, topLine, botLine;
BoxPtr pbox;
GlyphPtr glyph;
if(!XAAGetRGBAFromPixel(pixel,&red,&green,&blue,&alpha,pSrc->format))
return FALSE;
if(alpha != 0xffff) return FALSE;
XAAGetPixelFromRGBA(&pixel, red, green, blue, 0, pDst->format);
if((infoRec->WriteBitmapFlags & RGB_EQUAL) && !((red == green) && (green == blue)))
return FALSE;
x = pDst->pDrawable->x;
y = pDst->pDrawable->y;
while(nlist--) {
x += list->xOff;
y += list->yOff;
left = right = X = x;
top = bottom = Y = y;
for(i = 0; i < list->len; i++) {
glyph = glyphs[i];
L = X - glyph->info.x;
if(L < left) left = L;
R = L + glyph->info.width;
if(R > right) right = R;
T = Y - glyph->info.y;
if(T < top) top = T;
B = T + glyph->info.height;
if(B > bottom) bottom = B;
X += glyph->info.xOff;
Y += glyph->info.yOff;
}
width = right - left;
height = bottom - top;
if(width && height) {
pitch = (((width + 31) & ~31) >> 5) + 1;
pntr = (CARD32*)xalloc(sizeof(CARD32) * pitch * height);
if(!pntr)
return TRUE;
bzero(pntr, sizeof(CARD32) * pitch * height);
n = list->len;
X = x; Y = y;
while(n--) {
glyph = *glyphs++;
h = glyph->info.height;
w = glyph->info.width;
if(h && w) {
row = y - top - glyph->info.y;
column = x - left - glyph->info.x;
pnt = pntr + (row * pitch) + (column >> 5);
column &= 31;
dwords = ((w + 31) >> 5) - 1;
bits = (CARD32*)(glyph + 1);
if(dwords) {
while(h--) {
for(i = 0; i <= dwords; i++) {
if(column) {
pnt[i] |= SHIFT_L(*bits, column);
pnt[i + 1] |= SHIFT_R(*bits, 32 - column);
} else
pnt[i] |= *bits;
if(i != dwords) bits++;
}
bits++;
pnt += pitch;
}
} else {
if(column) {
while(h--) {
pnt[0] |= SHIFT_L(*bits, column);
pnt[0 + 1] |= SHIFT_R(*bits, 32 - column);
bits++;
pnt += pitch;
}
} else {
while(h--) {
*pnt |= *bits++;
pnt += pitch;
}
}
}
}
x += glyph->info.xOff;
y += glyph->info.yOff;
}
nbox = REGION_NUM_RECTS(pDst->pCompositeClip);
pbox = REGION_RECTS(pDst->pCompositeClip);
while(nbox && (top >= pbox->y2)) {
pbox++; nbox--;
}
while(nbox && (bottom > pbox->y1)) {
leftEdge = max(left, pbox->x1);
rightEdge = min(right, pbox->x2);
if(rightEdge > leftEdge) {
column = leftEdge - left;
topLine = max(top, pbox->y1);
botLine = min(bottom, pbox->y2);
h = botLine - topLine;
if(h > 0) {
(*infoRec->WriteBitmap)(infoRec->pScrn,
leftEdge, topLine, rightEdge - leftEdge, h,
(unsigned char*)(pntr +
((topLine - top) * pitch) + (column >> 5)),
pitch << 2, column & 31, pixel, -1, GXcopy, ~0);
}
}
nbox--; pbox++;
}
xfree(pntr);
} else {
x = X; y = Y;
}
list++;
}
return TRUE;
}
/* /*
* If it looks like we have a chance of being able to draw these * If it looks like we have a chance of being able to draw these
* glyphs with an accelerated Composite, do that now to avoid * glyphs with an accelerated Composite, do that now to avoid

View File

@ -9,12 +9,7 @@ AM_CPPFLAGS = \
-DXFree86Server \ -DXFree86Server \
-I$(top_srcdir)/miext/rootless -I$(top_srcdir)/miext/rootless
if X11APP SUBDIRS = bundle . GL xpr mach-startup doc
X11APP_SUBDIRS = bundle
endif
SUBDIRS = . GL xpr $(X11APP_SUBDIRS)
DIST_SUBDIRS = GL xpr bundle
libXquartz_la_SOURCES = \ libXquartz_la_SOURCES = \
$(top_srcdir)/fb/fbcmap_mi.c \ $(top_srcdir)/fb/fbcmap_mi.c \

View File

@ -19,7 +19,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.2.0</string> <string>2.3.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>x11a</string> <string>x11a</string>
<key>CSResourcesFileMapped</key> <key>CSResourcesFileMapped</key>

View File

@ -1,77 +1,269 @@
bin_SCRIPTS = x11app
.PHONY: x11app
x11app:
xcodebuild CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ARCHS="$(X11APP_ARCHS)"
install-data-hook: install-data-hook:
xcodebuild install DSTROOT="/$(DESTDIR)" INSTALL_PATH="$(APPLE_APPLICATIONS_DIR)" DEPLOYMENT_LOCATION=YES SKIP_INSTALL=NO ARCHS="$(X11APP_ARCHS)" ./mk_bundke.sh $(DESTDIR)$(APPLE_APPLICATIONS_DIR)/X11.app
clean-local:
rm -rf build
resourcedir=$(libdir)/X11/xserver resourcedir=$(libdir)/X11/xserver
resource_DATA = Xquartz.plist resource_DATA = Xquartz.plist
EXTRA_DIST = \ EXTRA_DIST = \
mk_bundke.sh \
$(resource_DATA) \ $(resource_DATA) \
Info.plist \ Resources/da.lproj/InfoPlist.strings \
X11.icns \ Resources/da.lproj/Localizable.strings \
bundle-main.c \ Resources/da.lproj/main.nib/keyedobjects.nib \
X11.xcodeproj/project.pbxproj \ Resources/Dutch.lproj/InfoPlist.strings \
Dutch.lproj/InfoPlist.strings \ Resources/Dutch.lproj/Localizable.strings \
Dutch.lproj/Localizable.strings \ Resources/Dutch.lproj/main.nib/keyedobjects.nib \
Dutch.lproj/main.nib/keyedobjects.nib \ Resources/English.lproj/InfoPlist.strings \
English.lproj/InfoPlist.strings \ Resources/English.lproj/Localizable.strings \
English.lproj/Localizable.strings \ Resources/English.lproj/main.nib/designable.nib \
English.lproj/main.nib/designable.nib \ Resources/English.lproj/main.nib/keyedobjects.nib \
English.lproj/main.nib/keyedobjects.nib \ Resources/fi.lproj/InfoPlist.strings \
French.lproj/InfoPlist.strings \ Resources/fi.lproj/Localizable.strings \
French.lproj/Localizable.strings \ Resources/fi.lproj/main.nib/keyedobjects.nib \
French.lproj/main.nib/keyedobjects.nib \ Resources/French.lproj/InfoPlist.strings \
German.lproj/InfoPlist.strings \ Resources/French.lproj/Localizable.strings \
German.lproj/Localizable.strings \ Resources/French.lproj/main.nib/keyedobjects.nib \
German.lproj/main.nib/keyedobjects.nib \ Resources/German.lproj/InfoPlist.strings \
Italian.lproj/InfoPlist.strings \ Resources/German.lproj/Localizable.strings \
Italian.lproj/Localizable.strings \ Resources/German.lproj/main.nib/keyedobjects.nib \
Italian.lproj/main.nib/keyedobjects.nib \ Resources/Italian.lproj/InfoPlist.strings \
Japanese.lproj/InfoPlist.strings \ Resources/Italian.lproj/Localizable.strings \
Japanese.lproj/Localizable.strings \ Resources/Italian.lproj/main.nib/keyedobjects.nib \
Japanese.lproj/main.nib/keyedobjects.nib \ Resources/Japanese.lproj/InfoPlist.strings \
Spanish.lproj/InfoPlist.strings \ Resources/Japanese.lproj/Localizable.strings \
Spanish.lproj/Localizable.strings \ Resources/Japanese.lproj/main.nib/keyedobjects.nib \
Spanish.lproj/main.nib/keyedobjects.nib \ Resources/ko.lproj/InfoPlist.strings \
da.lproj/InfoPlist.strings \ Resources/ko.lproj/Localizable.strings \
da.lproj/Localizable.strings \ Resources/ko.lproj/main.nib/keyedobjects.nib \
da.lproj/main.nib/keyedobjects.nib \ Resources/no.lproj/InfoPlist.strings \
fi.lproj/InfoPlist.strings \ Resources/no.lproj/Localizable.strings \
fi.lproj/Localizable.strings \ Resources/no.lproj/main.nib/keyedobjects.nib \
fi.lproj/main.nib/keyedobjects.nib \ Resources/pl.lproj/InfoPlist.strings \
ko.lproj/InfoPlist.strings \ Resources/pl.lproj/Localizable.strings \
ko.lproj/Localizable.strings \ Resources/pl.lproj/main.nib/keyedobjects.nib \
ko.lproj/main.nib/keyedobjects.nib \ Resources/pt.lproj/InfoPlist.strings \
no.lproj/InfoPlist.strings \ Resources/pt.lproj/Localizable.strings \
no.lproj/Localizable.strings \ Resources/pt.lproj/main.nib/keyedobjects.nib \
no.lproj/main.nib/keyedobjects.nib \ Resources/pt_PT.lproj/InfoPlist.strings \
pl.lproj/InfoPlist.strings \ Resources/pt_PT.lproj/Localizable.strings \
pl.lproj/Localizable.strings \ Resources/pt_PT.lproj/main.nib/keyedobjects.nib \
pl.lproj/main.nib/keyedobjects.nib \ Resources/ru.lproj/InfoPlist.strings \
pt.lproj/InfoPlist.strings \ Resources/ru.lproj/Localizable.strings \
pt.lproj/Localizable.strings \ Resources/ru.lproj/main.nib/keyedobjects.nib \
pt.lproj/main.nib/keyedobjects.nib \ Resources/Spanish.lproj/InfoPlist.strings \
pt_PT.lproj/InfoPlist.strings \ Resources/Spanish.lproj/Localizable.strings \
pt_PT.lproj/Localizable.strings \ Resources/Spanish.lproj/main.nib/keyedobjects.nib \
pt_PT.lproj/main.nib/keyedobjects.nib \ Resources/sv.lproj/InfoPlist.strings \
ru.lproj/InfoPlist.strings \ Resources/sv.lproj/Localizable.strings \
ru.lproj/Localizable.strings \ Resources/sv.lproj/main.nib/keyedobjects.nib \
ru.lproj/main.nib/keyedobjects.nib \ Resources/X11.icns \
sv.lproj/InfoPlist.strings \ Resources/zh_CN.lproj/InfoPlist.strings \
sv.lproj/Localizable.strings \ Resources/zh_CN.lproj/Localizable.strings \
sv.lproj/main.nib/keyedobjects.nib \ Resources/zh_CN.lproj/main.nib/keyedobjects.nib \
zh_CN.lproj/InfoPlist.strings \ Resources/zh_TW.lproj/InfoPlist.strings \
zh_CN.lproj/Localizable.strings \ Resources/zh_TW.lproj/Localizable.strings \
zh_CN.lproj/main.nib/keyedobjects.nib \ Resources/zh_TW.lproj/main.nib/keyedobjects.nib \
zh_TW.lproj/InfoPlist.strings \ Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h \
zh_TW.lproj/Localizable.strings \ Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h \
zh_TW.lproj/main.nib/keyedobjects.nib Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h \
Sparkle.framework/Versions/A/Headers/NSString+extras.h \
Sparkle.framework/Versions/A/Headers/RSS.h \
Sparkle.framework/Versions/A/Headers/Sparkle.h \
Sparkle.framework/Versions/A/Headers/SUAppcast.h \
Sparkle.framework/Versions/A/Headers/SUAppcastItem.h \
Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h \
Sparkle.framework/Versions/A/Headers/SUConstants.h \
Sparkle.framework/Versions/A/Headers/SUStatusChecker.h \
Sparkle.framework/Versions/A/Headers/SUStatusController.h \
Sparkle.framework/Versions/A/Headers/SUUnarchiver.h \
Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h \
Sparkle.framework/Versions/A/Headers/SUUpdater.h \
Sparkle.framework/Versions/A/Headers/SUUtilities.h \
Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/Info.plist \
Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib \
Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/classes.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/info.nib \
Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib \
Sparkle.framework/Versions/A/Sparkle

View File

@ -0,0 +1 @@
APPLx11a

View File

@ -66,6 +66,14 @@
<reference key="NSOnImage" ref="531645050"/> <reference key="NSOnImage" ref="531645050"/>
<reference key="NSMixedImage" ref="351811234"/> <reference key="NSMixedImage" ref="351811234"/>
</object> </object>
<object class="NSMenuItem" id="858487910">
<reference key="NSMenu" ref="576521955"/>
<string key="NSTitle">Check for updates...</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="531645050"/>
<reference key="NSMixedImage" ref="351811234"/>
</object>
<object class="NSMenuItem" id="272876017"> <object class="NSMenuItem" id="272876017">
<reference key="NSMenu" ref="576521955"/> <reference key="NSMenu" ref="576521955"/>
<bool key="NSIsDisabled">YES</bool> <bool key="NSIsDisabled">YES</bool>
@ -1500,6 +1508,9 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object> </object>
<string key="NSName"/> <string key="NSName"/>
</object> </object>
<object class="NSCustomObject" id="556755705">
<string key="NSClassName">SUUpdater</string>
</object>
</object> </object>
<object class="IBObjectContainer" key="IBDocument.Objects"> <object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords"> <object class="NSMutableArray" key="connectionRecords">
@ -2000,6 +2011,14 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object> </object>
<int key="connectionID">300394</int> <int key="connectionID">300394</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">checkForUpdates:</string>
<reference key="source" ref="556755705"/>
<reference key="destination" ref="858487910"/>
</object>
<int key="connectionID">300397</int>
</object>
</object> </object>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects"> <object class="NSArray" key="orderedObjects">
@ -2136,6 +2155,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<reference ref="1023546148"/> <reference ref="1023546148"/>
<reference ref="6876565"/> <reference ref="6876565"/>
<reference ref="479677589"/> <reference ref="479677589"/>
<reference ref="858487910"/>
</object> </object>
<reference key="parent" ref="365880285"/> <reference key="parent" ref="365880285"/>
</object> </object>
@ -3050,6 +3070,17 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<reference key="object" ref="989804990"/> <reference key="object" ref="989804990"/>
<reference key="parent" ref="57161931"/> <reference key="parent" ref="57161931"/>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">300395</int>
<reference key="object" ref="556755705"/>
<reference key="parent" ref="330408435"/>
<string key="objectName">Updater</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">300396</int>
<reference key="object" ref="858487910"/>
<reference key="parent" ref="576521955"/>
</object>
</object> </object>
</object> </object>
<object class="NSMutableDictionary" key="flattenedProperties"> <object class="NSMutableDictionary" key="flattenedProperties">
@ -3121,7 +3152,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>244.IBWindowTemplateEditedContentRect</string> <string>244.IBWindowTemplateEditedContentRect</string>
<string>244.ImportedFromIB2</string> <string>244.ImportedFromIB2</string>
<string>244.editorWindowContentRectSynchronizationRect</string> <string>244.editorWindowContentRectSynchronizationRect</string>
<string>244.lastResizeAction</string>
<string>244.windowTemplate.hasMaxSize</string> <string>244.windowTemplate.hasMaxSize</string>
<string>244.windowTemplate.hasMinSize</string> <string>244.windowTemplate.hasMinSize</string>
<string>244.windowTemplate.maxSize</string> <string>244.windowTemplate.maxSize</string>
@ -3142,7 +3172,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>285.IBWindowTemplateEditedContentRect</string> <string>285.IBWindowTemplateEditedContentRect</string>
<string>285.ImportedFromIB2</string> <string>285.ImportedFromIB2</string>
<string>285.editorWindowContentRectSynchronizationRect</string> <string>285.editorWindowContentRectSynchronizationRect</string>
<string>285.lastResizeAction</string>
<string>285.windowTemplate.hasMaxSize</string> <string>285.windowTemplate.hasMaxSize</string>
<string>285.windowTemplate.hasMinSize</string> <string>285.windowTemplate.hasMinSize</string>
<string>285.windowTemplate.maxSize</string> <string>285.windowTemplate.maxSize</string>
@ -3188,6 +3217,8 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>300368.ImportedFromIB2</string> <string>300368.ImportedFromIB2</string>
<string>300370.IBPluginDependency</string> <string>300370.IBPluginDependency</string>
<string>300370.ImportedFromIB2</string> <string>300370.ImportedFromIB2</string>
<string>300395.IBPluginDependency</string>
<string>300396.IBPluginDependency</string>
<string>305.IBPluginDependency</string> <string>305.IBPluginDependency</string>
<string>305.ImportedFromIB2</string> <string>305.ImportedFromIB2</string>
<string>310.IBPluginDependency</string> <string>310.IBPluginDependency</string>
@ -3368,19 +3399,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>{{313, 353}, {484, 280}}</string> <string>{{313, 353}, {484, 280}}</string>
<reference ref="9"/> <reference ref="9"/>
<string>{{184, 290}, {481, 345}}</string> <string>{{184, 290}, {481, 345}}</string>
<object class="NSDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>IBResizeActionFinalFrame</string>
<string>IBResizeActionInitialFrame</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{{182, 481}, {484, 280}}</string>
<string>{{182, 103}, {536, 658}}</string>
</object>
</object>
<reference ref="9"/> <reference ref="9"/>
<reference ref="9"/> <reference ref="9"/>
<string>{3.40282e+38, 3.40282e+38}</string> <string>{3.40282e+38, 3.40282e+38}</string>
@ -3401,19 +3419,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>{{407, 545}, {454, 311}}</string> <string>{{407, 545}, {454, 311}}</string>
<reference ref="9"/> <reference ref="9"/>
<string>{{433, 406}, {486, 327}}</string> <string>{{433, 406}, {486, 327}}</string>
<object class="NSDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>IBResizeActionFinalFrame</string>
<string>IBResizeActionInitialFrame</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{{537, 554}, {454, 311}}</string>
<string>{{537, 576}, {471, 289}}</string>
</object>
</object>
<integer value="0"/> <integer value="0"/>
<reference ref="9"/> <reference ref="9"/>
<string>{3.40282e+38, 3.40282e+38}</string> <string>{3.40282e+38, 3.40282e+38}</string>
@ -3460,6 +3465,8 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/> <reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/> <reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/> <reference ref="9"/>
@ -3593,7 +3600,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object> </object>
</object> </object>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">300394</int> <int key="maxID">300397</int>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"> <object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions"> <object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -3623,6 +3630,18 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object> </object>
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+"> <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
<bool key="EncodedWithXMLCoder">YES</bool> <bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">SUUpdater</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">checkForUpdates:</string>
<string key="NS.object.0">id</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBDocumentRelativeSource</string>
<string key="minorKey">../Sparkle.framework/Versions/A/Headers/SUUpdater.h</string>
</object>
</object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">X11Controller</string> <string key="className">X11Controller</string>
<string key="superclassName">NSObject</string> <string key="superclassName">NSObject</string>
@ -3728,7 +3747,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object> </object>
</object> </object>
<int key="IBDocument.localizationMode">0</int> <int key="IBDocument.localizationMode">0</int>
<nil key="IBDocument.LastKnownRelativeProjectPath"/> <string key="IBDocument.LastKnownRelativeProjectPath">../X11.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int> <int key="IBDocument.defaultPropertyAccessControl">3</int>
</data> </data>
</archive> </archive>

Binary file not shown.

View File

@ -0,0 +1 @@
Versions/Current/Headers

View File

@ -0,0 +1 @@
Versions/Current/Resources

View File

@ -0,0 +1 @@
Versions/Current/Sparkle

View File

@ -0,0 +1,13 @@
//
// NSApplication+AppCopies.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface NSApplication (SUAppCopies)
- (int)copiesRunning;
@end

View File

@ -0,0 +1,11 @@
//
// NSFileManager+Authentication.m
// Sparkle
//
// Created by Andy Matuschak on 3/9/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
@interface NSFileManager (SUAuthenticationAdditions)
- (BOOL)movePathWithAuthentication:(NSString *)src toPath:(NSString *)dst;
@end

View File

@ -0,0 +1,15 @@
//
// NSFileManager+Verification.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
// For the paranoid folks!
@interface NSFileManager (SUVerification)
- (BOOL)validatePath:(NSString *)path withMD5Hash:(NSString *)hash;
- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature;
@end

View File

@ -0,0 +1,61 @@
/*
BSD License
Copyright (c) 2002, Brent Simmons
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of ranchero.com or Brent Simmons nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
NSString+extras.h
NetNewsWire
Created by Brent Simmons on Fri Jun 14 2002.
Copyright (c) 2002 Brent Simmons. All rights reserved.
*/
#import <Foundation/Foundation.h>
#import <CoreFoundation/CoreFoundation.h>
@interface NSString (extras)
- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set;
- (NSString *) trimWhiteSpace;
- (NSString *) stripHTML;
- (NSString *) ellipsizeAfterNWords: (int) n;
+ (BOOL) stringIsEmpty: (NSString *) s;
@end

View File

@ -0,0 +1,98 @@
/*
BSD License
Copyright (c) 2002, Brent Simmons
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of ranchero.com or Brent Simmons nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
RSS.h
A class for reading RSS feeds.
Created by Brent Simmons on Wed Apr 17 2002.
Copyright (c) 2002 Brent Simmons. All rights reserved.
*/
#import <Cocoa/Cocoa.h>
#import <CoreFoundation/CoreFoundation.h>
#import "NSString+extras.h"
@interface RSS : NSObject {
NSDictionary *headerItems;
NSMutableArray *newsItems;
NSString *version;
BOOL flRdf;
BOOL normalize;
}
/*Public*/
- (RSS *) initWithTitle: (NSString *) title andDescription: (NSString *) description;
- (RSS *) initWithData: (NSData *) rssData normalize: (BOOL) fl;
- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl;
- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl userAgent:(NSString *)userAgent;
- (NSDictionary *) headerItems;
- (NSMutableArray *) newsItems;
- (NSString *) version;
// AMM's extensions for Sparkle
- (NSDictionary *)newestItem;
/*Private*/
- (void) createheaderdictionary: (CFXMLTreeRef) tree;
- (void) createitemsarray: (CFXMLTreeRef) tree;
- (void) setversionstring: (CFXMLTreeRef) tree;
- (void) flattenimagechildren: (CFXMLTreeRef) tree into: (NSMutableDictionary *) dictionary;
- (void) flattensourceattributes: (CFXMLNodeRef) node into: (NSMutableDictionary *) dictionary;
- (CFXMLTreeRef) getchanneltree: (CFXMLTreeRef) tree;
- (CFXMLTreeRef) getnamedtree: (CFXMLTreeRef) currentTree name: (NSString *) name;
- (void) normalizeRSSItem: (NSMutableDictionary *) rssItem;
- (NSString *) getelementvalue: (CFXMLTreeRef) tree;
@end

View File

@ -0,0 +1,27 @@
//
// SUAppcast.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class RSS, SUAppcastItem;
@interface SUAppcast : NSObject {
NSArray *items;
id delegate;
}
- (void)fetchAppcastFromURL:(NSURL *)url;
- (void)setDelegate:delegate;
- (SUAppcastItem *)newestItem;
- (NSArray *)items;
@end
@interface NSObject (SUAppcastDelegate)
- appcastDidFinishLoading:(SUAppcast *)appcast;
@end

View File

@ -0,0 +1,57 @@
//
// SUAppcastItem.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface SUAppcastItem : NSObject {
NSString *title;
NSDate *date;
NSString *description;
NSURL *releaseNotesURL;
NSString *DSASignature;
NSString *MD5Sum;
NSURL *fileURL;
NSString *fileVersion;
NSString *versionString;
}
// Initializes with data from a dictionary provided by the RSS class.
- initWithDictionary:(NSDictionary *)dict;
- (NSString *)title;
- (void)setTitle:(NSString *)aTitle;
- (NSDate *)date;
- (void)setDate:(NSDate *)aDate;
- (NSString *)description;
- (void)setDescription:(NSString *)aDescription;
- (NSURL *)releaseNotesURL;
- (void)setReleaseNotesURL:(NSURL *)aReleaseNotesURL;
- (NSString *)DSASignature;
- (void)setDSASignature:(NSString *)aDSASignature;
- (NSString *)MD5Sum;
- (void)setMD5Sum:(NSString *)aMd5Sum;
- (NSURL *)fileURL;
- (void)setFileURL:(NSURL *)aFileURL;
- (NSString *)fileVersion;
- (void)setFileVersion:(NSString *)aFileVersion;
- (NSString *)versionString;
- (void)setVersionString:(NSString *)versionString;
@end

View File

@ -0,0 +1,21 @@
//
// SUAutomaticUpdateAlert.h
// Sparkle
//
// Created by Andy Matuschak on 3/18/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class SUAppcastItem;
@interface SUAutomaticUpdateAlert : NSWindowController {
SUAppcastItem *updateItem;
}
- initWithAppcastItem:(SUAppcastItem *)item;
- (IBAction)relaunchNow:sender;
- (IBAction)relaunchLater:sender;
@end

View File

@ -0,0 +1,20 @@
//
// SUConstants.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
extern NSString *SUUpdaterWillRestartNotification;
extern NSString *SUCheckAtStartupKey;
extern NSString *SUFeedURLKey;
extern NSString *SUShowReleaseNotesKey;
extern NSString *SUSkippedVersionKey;
extern NSString *SUScheduledCheckIntervalKey;
extern NSString *SULastCheckTimeKey;
extern NSString *SUExpectsDSASignatureKey;
extern NSString *SUPublicDSAKeyKey;
extern NSString *SUAutomaticallyUpdateKey;
extern NSString *SUAllowsAutomaticUpdatesKey;

View File

@ -0,0 +1,26 @@
//
// SUStatusChecker.h
// Sparkle
//
// Created by Evan Schoenberg on 7/6/06.
//
#import <Cocoa/Cocoa.h>
#import <Sparkle/SUUpdater.h>
@class SUStatusChecker;
@protocol SUStatusCheckerDelegate <NSObject>
//versionString will be nil and isNewVersion will be NO if version checking fails.
- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion;
@end
@interface SUStatusChecker : SUUpdater {
id<SUStatusCheckerDelegate> scDelegate;
}
// Create a status checker which will notifiy delegate once the appcast version is determined.
// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol.
+ (SUStatusChecker *)statusCheckerForDelegate:(id<SUStatusCheckerDelegate>)delegate;
@end

View File

@ -0,0 +1,33 @@
//
// SUStatusController.h
// Sparkle
//
// Created by Andy Matuschak on 3/14/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface SUStatusController : NSWindowController {
double progressValue, maxProgressValue;
NSString *title, *statusText, *buttonTitle;
IBOutlet NSButton *actionButton;
}
// Pass 0 for the max progress value to get an indeterminate progress bar.
// Pass nil for the status text to not show it.
- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText;
// If isDefault is YES, the button's key equivalent will be \r.
- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault;
- (void)setButtonEnabled:(BOOL)enabled;
- (double)progressValue;
- (void)setProgressValue:(double)value;
- (double)maxProgressValue;
- (void)setMaxProgressValue:(double)value;
- (void)setStatusText:(NSString *)statusText;
@end

View File

@ -0,0 +1,25 @@
//
// SUUnarchiver.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface SUUnarchiver : NSObject {
id delegate;
}
- (void)unarchivePath:(NSString *)path;
- (void)setDelegate:delegate;
@end
@interface NSObject (SUUnarchiverDelegate)
- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length;
- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver;
- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver;
@end

View File

@ -0,0 +1,40 @@
//
// SUUpdateAlert.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
typedef enum
{
SUInstallUpdateChoice,
SURemindMeLaterChoice,
SUSkipThisVersionChoice
} SUUpdateAlertChoice;
@class WebView, SUAppcastItem;
@interface SUUpdateAlert : NSWindowController {
SUAppcastItem *updateItem;
id delegate;
IBOutlet WebView *releaseNotesView;
IBOutlet NSTextField *description;
NSProgressIndicator *releaseNotesSpinner;
BOOL webViewFinishedLoading;
}
- initWithAppcastItem:(SUAppcastItem *)item;
- (void)setDelegate:delegate;
- (IBAction)installUpdate:sender;
- (IBAction)skipThisVersion:sender;
- (IBAction)remindMeLater:sender;
@end
@interface NSObject (SUUpdateAlertDelegate)
- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice;
@end

View File

@ -0,0 +1,55 @@
//
// SUUpdater.h
// Sparkle
//
// Created by Andy Matuschak on 1/4/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
// Before you use Sparkle in your app, you must set SUFeedURL in Info.plist to the
// address of the appcast on your webserver. If you don't already have an
// appcast, please see the Sparkle documentation to learn about how to set one up.
// .zip, .dmg, .tar, .tbz, .tgz archives are supported at this time.
// By default, Sparkle offers to show the user the release notes of the build they'll be
// getting, which it assumes are in the description (or body) field of the relevant RSS item.
// Set SUShowReleaseNotes to <false/> in Info.plist to hide the button.
@class SUAppcastItem, SUUpdateAlert, SUStatusController;
@interface SUUpdater : NSObject {
SUAppcastItem *updateItem;
SUStatusController *statusController;
SUUpdateAlert *updateAlert;
NSURLDownload *downloader;
NSString *downloadPath;
NSTimer *checkTimer;
NSTimeInterval checkInterval;
BOOL verbose;
BOOL updateInProgress;
}
// This IBAction is meant for a main menu item. Hook up any menu item to this action,
// and Sparkle will check for updates and report back its findings verbosely.
- (IBAction)checkForUpdates:sender;
// This method is similar to the above, but it's intended for updates initiated by
// the computer instead of by the user. It does not alert the user when he is up to date,
// and it remains silent about network errors in fetching the feed. This is what you
// want to call to update programmatically; only use checkForUpdates: with buttons and menu items.
- (void)checkForUpdatesInBackground;
// This method allows you to schedule a check to run every time interval. You can
// pass 0 to this method to cancel a previously scheduled timer. You probably don't want
// to call this directly: if you set a SUScheduledCheckInterval key in Info.plist or
// the user defaults, Sparkle will set this up for you automatically on startup. You might
// just want to call this every time the user changes the setting in the preferences.
- (void)scheduleCheckWithInterval:(NSTimeInterval)interval;
@end

View File

@ -0,0 +1,20 @@
//
// SUUtilities.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import <Cocoa/Cocoa.h>
id SUInfoValueForKey(NSString *key);
NSString *SUHostAppName();
NSString *SUHostAppDisplayName();
NSString *SUHostAppVersion();
NSString *SUHostAppVersionString();
NSComparisonResult SUStandardVersionComparison(NSString * versionA, NSString * versionB);
// If running make localizable-strings for genstrings, ignore the error on this line.
NSString *SULocalizedString(NSString *key, NSString *comment);

View File

@ -0,0 +1,22 @@
//
// Sparkle.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#import "SUUpdater.h"
#import "SUUtilities.h"
#import "SUConstants.h"
#import "SUAppcast.h"
#import "SUAppcastItem.h"
#import "SUUpdateAlert.h"
#import "SUAutomaticUpdateAlert.h"
#import "SUStatusController.h"
#import "SUUnarchiver.h"
#import "SUStatusChecker.h"
#import "NSApplication+AppCopies.h"
#import "NSFileManager+Authentication.h"
#import "NSFileManager+Verification.h"

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Sparkle</string>
<key>CFBundleIdentifier</key>
<string>org.andymatuschak.Sparkle</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Sparkle</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.1</string>
</dict>
</plist>

View File

@ -0,0 +1,12 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
CLASS = SUStatusController;
LANGUAGE = ObjC;
OUTLETS = {actionButton = id; };
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>69 10 356 240 0 0 1280 832 </string>
<key>IBFramework Version</key>
<string>443.0</string>
<key>IBOpenObjects</key>
<array>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>8H14</string>
</dict>
</plist>

View File

@ -0,0 +1,12 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {relaunchLater = id; relaunchNow = id; };
CLASS = SUAutomaticUpdateAlert;
LANGUAGE = ObjC;
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>188 142 356 240 0 0 1280 1002 </string>
<key>IBFramework Version</key>
<string>443.0</string>
<key>IBSystem Version</key>
<string>8I127</string>
</dict>
</plist>

View File

@ -0,0 +1,21 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = NSObject; LANGUAGE = ObjC; },
{
ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; };
CLASS = SUUpdateAlert;
LANGUAGE = ObjC;
OUTLETS = {description = NSTextField; releaseNotesView = WebView; };
SUPERCLASS = NSWindowController;
},
{
ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; };
CLASS = SUUpdateAlertController;
LANGUAGE = ObjC;
OUTLETS = {releaseNotesView = id; };
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}

Some files were not shown because too many files have changed in this diff Show More