summaryrefslogtreecommitdiffstats
path: root/generic/ttk/ttkManager.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/ttk/ttkManager.c')
-rw-r--r--generic/ttk/ttkManager.c120
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];