diff options
Diffstat (limited to 'generic/ttk/ttkManager.c')
-rw-r--r-- | generic/ttk/ttkManager.c | 120 |
1 files changed, 59 insertions, 61 deletions
diff --git a/generic/ttk/ttkManager.c b/generic/ttk/ttkManager.c index 8fa7860..0a3f13c 100644 --- a/generic/ttk/ttkManager.c +++ b/generic/ttk/ttkManager.c @@ -4,7 +4,6 @@ * Support routines for geometry managers. */ -#include <string.h> #include "tkInt.h" #include "ttkManager.h" @@ -35,9 +34,9 @@ * (2) Manager voluntarily relinquishes control * (3) Content window is destroyed * - * In case (1), Tk calls the manager's lostSlaveProc. + * In case (1), Tk calls the manager's lostContentProc. * Case (2) is performed by calling Tk_ManageGeometry(slave,NULL,0); - * in this case Tk does _not_ call the LostSlaveProc (documented behavior). + * in this case Tk does _not_ call the lostContentProc (documented behavior). * Tk doesn't handle case (3) either; to account for that we * register an event handler on the slave widget to track <Destroy> events. */ @@ -60,9 +59,9 @@ struct TtkManager_ { Ttk_ManagerSpec *managerSpec; void *managerData; - Tk_Window containerWindow; + Tk_Window window; unsigned flags; - int nContent; + TkSizeT nManaged; Ttk_Content **content; }; @@ -96,7 +95,7 @@ static void RecomputeSize(Ttk_Manager *mgr) int width = 1, height = 1; if (mgr->managerSpec->RequestedSize(mgr->managerData, &width, &height)) { - Tk_GeometryRequest(mgr->containerWindow, width, height); + Tk_GeometryRequest(mgr->window, width, height); ScheduleUpdate(mgr, MGR_RELAYOUT_REQUIRED); } mgr->flags &= ~MGR_RESIZE_REQUIRED; @@ -143,7 +142,7 @@ static const int ManagerEventMask = StructureNotifyMask; static void ManagerEventHandler(ClientData clientData, XEvent *eventPtr) { Ttk_Manager *mgr = (Ttk_Manager *)clientData; - int i; + TkSizeT i; switch (eventPtr->type) { @@ -151,7 +150,7 @@ static void ManagerEventHandler(ClientData clientData, XEvent *eventPtr) RecomputeLayout(mgr); break; case MapNotify: - for (i = 0; i < mgr->nContent; ++i) { + for (i = 0; i < mgr->nManaged; ++i) { Ttk_Content *slave = mgr->content[i]; if (slave->flags & CONTENT_MAPPED) { Tk_MapWindow(slave->contentWindow); @@ -159,7 +158,7 @@ static void ManagerEventHandler(ClientData clientData, XEvent *eventPtr) } break; case UnmapNotify: - for (i = 0; i < mgr->nContent; ++i) { + for (i = 0; i < mgr->nManaged; ++i) { Ttk_Content *slave = mgr->content[i]; Tk_UnmapWindow(slave->contentWindow); } @@ -167,16 +166,15 @@ static void ManagerEventHandler(ClientData clientData, XEvent *eventPtr) } } -/* ++ LostContentEventHandler -- - * Notifies manager when a slave is destroyed +/* ++ ContentLostEventHandler -- + * Notifies manager when a content window is destroyed * (see <<NOTE-LOSTCONTENT>>). */ -static const unsigned SlaveEventMask = StructureNotifyMask; -static void LostContentEventHandler(ClientData clientData, XEvent *eventPtr) +static void ContentLostEventHandler(void *clientData, XEvent *eventPtr) { Ttk_Content *slave = (Ttk_Content *)clientData; if (eventPtr->type == DestroyNotify) { - slave->manager->managerSpec->tkGeomMgr.lostSlaveProc( + slave->manager->managerSpec->tkGeomMgr.lostContentProc( slave->manager, slave->contentWindow); } } @@ -208,19 +206,19 @@ static void DeleteSlave(Ttk_Content *content) */ Ttk_Manager *Ttk_CreateManager( - Ttk_ManagerSpec *managerSpec, void *managerData, Tk_Window containerWindow) + Ttk_ManagerSpec *managerSpec, void *managerData, Tk_Window window) { Ttk_Manager *mgr = (Ttk_Manager *)ckalloc(sizeof(*mgr)); mgr->managerSpec = managerSpec; mgr->managerData = managerData; - mgr->containerWindow = containerWindow; - mgr->nContent = 0; + mgr->window = window; + mgr->nManaged = 0; mgr->content = NULL; mgr->flags = 0; Tk_CreateEventHandler( - mgr->containerWindow, ManagerEventMask, ManagerEventHandler, mgr); + mgr->window, ManagerEventMask, ManagerEventHandler, mgr); return mgr; } @@ -228,10 +226,10 @@ Ttk_Manager *Ttk_CreateManager( void Ttk_DeleteManager(Ttk_Manager *mgr) { Tk_DeleteEventHandler( - mgr->containerWindow, ManagerEventMask, ManagerEventHandler, mgr); + mgr->window, ManagerEventMask, ManagerEventHandler, mgr); - while (mgr->nContent > 0) { - Ttk_ForgetContent(mgr, mgr->nContent - 1); + while (mgr->nManaged > 0) { + Ttk_ForgetContent(mgr, mgr->nManaged - 1); } if (mgr->content) { ckfree(mgr->content); @@ -249,10 +247,10 @@ void Ttk_DeleteManager(Ttk_Manager *mgr) /* ++ InsertContent -- * Adds content to the list of managed windows. */ -static void InsertContent(Ttk_Manager *mgr, Ttk_Content *content, int index) +static void InsertContent(Ttk_Manager *mgr, Ttk_Content *content, TkSizeT index) { - int endIndex = mgr->nContent++; - mgr->content = (Ttk_Content **)ckrealloc(mgr->content, mgr->nContent * sizeof(Ttk_Content *)); + TkSizeT endIndex = mgr->nManaged++; + mgr->content = (Ttk_Content **)ckrealloc(mgr->content, mgr->nManaged * sizeof(Ttk_Content *)); while (endIndex > index) { mgr->content[endIndex] = mgr->content[endIndex - 1]; @@ -265,7 +263,7 @@ static void InsertContent(Ttk_Manager *mgr, Ttk_Content *content, int index) &mgr->managerSpec->tkGeomMgr, mgr); Tk_CreateEventHandler(content->contentWindow, - SlaveEventMask, LostContentEventHandler, content); + StructureNotifyMask, ContentLostEventHandler, content); ScheduleUpdate(mgr, MGR_RESIZE_REQUIRED); } @@ -278,10 +276,10 @@ static void InsertContent(Ttk_Manager *mgr, Ttk_Content *content, int index) * [1] It's safe to call Tk_UnmapWindow / Tk_UnmaintainGeometry even if this * routine is called from the slave's DestroyNotify event handler. */ -static void RemoveSlave(Ttk_Manager *mgr, int index) +static void RemoveSlave(Ttk_Manager *mgr, TkSizeT index) { Ttk_Content *slave = mgr->content[index]; - int i; + TkSizeT i; /* Notify manager: */ @@ -289,18 +287,18 @@ static void RemoveSlave(Ttk_Manager *mgr, int index) /* Remove from array: */ - --mgr->nContent; - for (i = index ; i < mgr->nContent; ++i) { + --mgr->nManaged; + for (i = index ; i < mgr->nManaged; ++i) { mgr->content[i] = mgr->content[i+1]; } /* Clean up: */ Tk_DeleteEventHandler( - slave->contentWindow, SlaveEventMask, LostContentEventHandler, slave); + slave->contentWindow, StructureNotifyMask, ContentLostEventHandler, slave); /* Note [1] */ - Tk_UnmaintainGeometry(slave->contentWindow, mgr->containerWindow); + Tk_UnmaintainGeometry(slave->contentWindow, mgr->window); Tk_UnmapWindow(slave->contentWindow); DeleteSlave(slave); @@ -315,7 +313,7 @@ static void RemoveSlave(Ttk_Manager *mgr, int index) void Ttk_GeometryRequestProc(ClientData clientData, Tk_Window contentWindow) { Ttk_Manager *mgr = (Ttk_Manager *)clientData; - int index = Ttk_ContentIndex(mgr, contentWindow); + TkSizeT index = Ttk_ContentIndex(mgr, contentWindow); int reqWidth = Tk_ReqWidth(contentWindow); int reqHeight= Tk_ReqHeight(contentWindow); @@ -329,7 +327,7 @@ void Ttk_GeometryRequestProc(ClientData clientData, Tk_Window contentWindow) void Ttk_LostContentProc(ClientData clientData, Tk_Window contentWindow) { Ttk_Manager *mgr = (Ttk_Manager *)clientData; - int index = Ttk_ContentIndex(mgr, contentWindow); + TkSizeT index = Ttk_ContentIndex(mgr, contentWindow); /* ASSERT: index >= 0 */ RemoveSlave(mgr, index); @@ -343,7 +341,7 @@ void Ttk_LostContentProc(ClientData clientData, Tk_Window contentWindow) * Add a new content window at the specified index. */ void Ttk_InsertContent( - Ttk_Manager *mgr, int index, Tk_Window tkwin, void *data) + Ttk_Manager *mgr, TkSizeT index, Tk_Window tkwin, void *data) { Ttk_Content *slave = NewContent(mgr, tkwin, data); InsertContent(mgr, slave, index); @@ -352,7 +350,7 @@ void Ttk_InsertContent( /* ++ Ttk_ForgetContent -- * Unmanage the specified content window. */ -void Ttk_ForgetContent(Ttk_Manager *mgr, int index) +void Ttk_ForgetContent(Ttk_Manager *mgr, TkSizeT index) { Tk_Window contentWindow = mgr->content[index]->contentWindow; RemoveSlave(mgr, index); @@ -367,12 +365,12 @@ void Ttk_ForgetContent(Ttk_Manager *mgr, int index) * map the content window. */ void Ttk_PlaceContent( - Ttk_Manager *mgr, int index, int x, int y, int width, int height) + Ttk_Manager *mgr, TkSizeT index, int x, int y, int width, int height) { Ttk_Content *slave = mgr->content[index]; - Tk_MaintainGeometry(slave->contentWindow,mgr->containerWindow,x,y,width,height); + Tk_MaintainGeometry(slave->contentWindow,mgr->window,x,y,width,height); slave->flags |= CONTENT_MAPPED; - if (Tk_IsMapped(mgr->containerWindow)) { + if (Tk_IsMapped(mgr->window)) { Tk_MapWindow(slave->contentWindow); } } @@ -380,10 +378,10 @@ void Ttk_PlaceContent( /* ++ Ttk_UnmapContent -- * Unmap the specified content window, but leave it managed. */ -void Ttk_UnmapContent(Ttk_Manager *mgr, int index) +void Ttk_UnmapContent(Ttk_Manager *mgr, TkSizeT index) { Ttk_Content *slave = mgr->content[index]; - Tk_UnmaintainGeometry(slave->contentWindow, mgr->containerWindow); + Tk_UnmaintainGeometry(slave->contentWindow, mgr->window); slave->flags &= ~CONTENT_MAPPED; /* Contrary to documentation, Tk_UnmaintainGeometry doesn't always * unmap the content window: @@ -406,15 +404,15 @@ void Ttk_ManagerSizeChanged(Ttk_Manager *mgr) /* +++ Accessors. */ -int Ttk_NumberContent(Ttk_Manager *mgr) +TkSizeT Ttk_NumberContent(Ttk_Manager *mgr) { - return mgr->nContent; + return mgr->nManaged; } -void *Ttk_ContentData(Ttk_Manager *mgr, int index) +void *Ttk_ContentData(Ttk_Manager *mgr, TkSizeT index) { return mgr->content[index]->data; } -Tk_Window Ttk_ContentWindow(Ttk_Manager *mgr, int index) +Tk_Window Ttk_ContentWindow(Ttk_Manager *mgr, TkSizeT index) { return mgr->content[index]->contentWindow; } @@ -426,13 +424,13 @@ Tk_Window Ttk_ContentWindow(Ttk_Manager *mgr, int index) /* ++ Ttk_ContentIndex -- * Returns the index of specified content window, -1 if not found. */ -int Ttk_ContentIndex(Ttk_Manager *mgr, Tk_Window contentWindow) +TkSizeT Ttk_ContentIndex(Ttk_Manager *mgr, Tk_Window contentWindow) { - int index; - for (index = 0; index < mgr->nContent; ++index) + TkSizeT index; + for (index = 0; index < mgr->nManaged; ++index) if (mgr->content[index]->contentWindow == contentWindow) return index; - return -1; + return TCL_INDEX_NONE; } /* ++ Ttk_GetContentIndexFromObj(interp, mgr, objPtr, indexPtr) -- @@ -445,19 +443,19 @@ int Ttk_ContentIndex(Ttk_Manager *mgr, Tk_Window contentWindow) */ int Ttk_GetContentIndexFromObj( - Tcl_Interp *interp, Ttk_Manager *mgr, Tcl_Obj *objPtr, int *indexPtr) + Tcl_Interp *interp, Ttk_Manager *mgr, Tcl_Obj *objPtr, TkSizeT *indexPtr) { const char *string = Tcl_GetString(objPtr); - int index = 0; + TkSizeT index = 0; Tk_Window tkwin; /* Try interpreting as an integer first: */ - if (Tcl_GetIntFromObj(NULL, objPtr, &index) == TCL_OK) { - if (index < 0 || index >= mgr->nContent) { + if (TkGetIntForIndex(objPtr, mgr->nManaged - 1, 1, &index) == TCL_OK) { + if (index + 1 > mgr->nManaged + 1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "Slave index %d out of bounds", index)); - Tcl_SetErrorCode(interp, "TTK", "SLAVE", "INDEX", NULL); + "Managed window index %d out of bounds", (int)index)); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", NULL); return TCL_ERROR; } *indexPtr = index; @@ -467,13 +465,13 @@ int Ttk_GetContentIndexFromObj( /* Try interpreting as a slave window name; */ if ((*string == '.') && - (tkwin = Tk_NameToWindow(interp, string, mgr->containerWindow))) { + (tkwin = Tk_NameToWindow(interp, string, mgr->window))) { index = Ttk_ContentIndex(mgr, tkwin); - if (index < 0) { + if (index == TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s is not managed by %s", string, - Tk_PathName(mgr->containerWindow))); - Tcl_SetErrorCode(interp, "TTK", "SLAVE", "MANAGER", NULL); + Tk_PathName(mgr->window))); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "MANAGER", NULL); return TCL_ERROR; } *indexPtr = index; @@ -481,15 +479,15 @@ int Ttk_GetContentIndexFromObj( } Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "Invalid slave specification %s", string)); - Tcl_SetErrorCode(interp, "TTK", "SLAVE", "SPEC", NULL); + "Invalid managed window specification %s", string)); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "SPEC", NULL); return TCL_ERROR; } /* ++ Ttk_ReorderContent(mgr, fromIndex, toIndex) -- * Change content window order. */ -void Ttk_ReorderContent(Ttk_Manager *mgr, int fromIndex, int toIndex) +void Ttk_ReorderContent(Ttk_Manager *mgr, TkSizeT fromIndex, TkSizeT toIndex) { Ttk_Content *moved = mgr->content[fromIndex]; |