summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormdejong <mdejong>2002-05-27 20:34:32 (GMT)
committermdejong <mdejong>2002-05-27 20:34:32 (GMT)
commit1c823cfbaafe492b3bd9a506d782804f797bcc2e (patch)
tree73e0c05641e4af9e22792086a5eebd4250e5666b
parent6a4f24b098eed70f278a40916100f278bc7cf28a (diff)
downloadtk-1c823cfbaafe492b3bd9a506d782804f797bcc2e.zip
tk-1c823cfbaafe492b3bd9a506d782804f797bcc2e.tar.gz
tk-1c823cfbaafe492b3bd9a506d782804f797bcc2e.tar.bz2
* unix/tkUnixWm.c (WmInfo, TkWmCleanup, TkWmNewWindow,
TkWmMapWindow, TkWmDeadWindow, Tk_WmCmd): Replace WmInfo's master and masterWindowName members with a masterPtr member. This implementation is much simpler and mirrors the Win32 implementation. This change makes it easy to check the flags of the master window. No user visible changes.
-rw-r--r--ChangeLog12
-rw-r--r--unix/tkUnixWm.c62
2 files changed, 33 insertions, 41 deletions
diff --git a/ChangeLog b/ChangeLog
index 744562b..ae6852b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2002-05-27 Mo DeJong <mdejong@users.sourceforge.net>
+ * unix/tkUnixWm.c (WmInfo, TkWmCleanup, TkWmNewWindow,
+ TkWmMapWindow, TkWmDeadWindow, Tk_WmCmd): Replace
+ WmInfo's master and masterWindowName members with
+ a masterPtr member. This implementation is much
+ simpler and mirrors the Win32 implementation. This
+ change makes it easy to check the flags of the
+ master window. No user visible changes.
+
+2002-05-27 Mo DeJong <mdejong@users.sourceforge.net>
+
* generic/tkInt.decls: Add unix decl for TkpWmSetState.
* generic/tkIntPlatDecls.h: Regen.
* generic/tkStubInit.c: Regen.
@@ -8,7 +18,7 @@
mapping.
* unix/tkUnixWm.c (Tk_WmCmd, TkpWmSetState): Move
state change code into TkpWmSetState to more closely
- match the Win32 implementation.
+ match the Win32 implementation. No user visible changes.
2002-05-27 Mo DeJong <mdejong@users.sourceforge.net>
diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c
index 47c1e87..458c80f 100644
--- a/unix/tkUnixWm.c
+++ b/unix/tkUnixWm.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkUnixWm.c,v 1.18 2002/05/27 19:49:33 mdejong Exp $
+ * RCS: @(#) $Id: tkUnixWm.c,v 1.19 2002/05/27 20:34:32 mdejong Exp $
*/
#include "tkPort.h"
@@ -62,19 +62,14 @@ typedef struct TkWmInfo {
char *title; /* Title to display in window caption. If
* NULL, use name of widget. Malloced. */
char *iconName; /* Name to display in icon. Malloced. */
- Window master; /* Master window for TRANSIENT_FOR property,
- * or None. */
XWMHints hints; /* Various pieces of information for
* window manager. */
char *leaderName; /* Path name of leader of window group
* (corresponds to hints.window_group).
* Malloc-ed. Note: this field doesn't
* get updated if leader is destroyed. */
- char *masterWindowName; /* Path name of window specified as master
- * in "wm transient" command, or NULL.
- * Malloc-ed. Note: this field doesn't
- * get updated if masterWindowName is
- * destroyed. */
+ TkWindow *masterPtr; /* Master window for TRANSIENT_FOR property,
+ * or NULL. */
Tk_Window icon; /* Window to use as icon for this window,
* or NULL. */
Tk_Window iconFor; /* Window for which this window is icon, or
@@ -383,9 +378,6 @@ void TkWmCleanup(dispPtr)
if (wmPtr->leaderName != NULL) {
ckfree(wmPtr->leaderName);
}
- if (wmPtr->masterWindowName != NULL) {
- ckfree(wmPtr->masterWindowName);
- }
if (wmPtr->menubar != NULL) {
Tk_DestroyWindow(wmPtr->menubar);
}
@@ -438,7 +430,7 @@ TkWmNewWindow(winPtr)
memset(wmPtr, 0, sizeof(WmInfo));
wmPtr->winPtr = winPtr;
wmPtr->reparent = None;
- wmPtr->master = None;
+ wmPtr->masterPtr = NULL;
wmPtr->hints.flags = InputHint | StateHint;
wmPtr->hints.input = True;
wmPtr->hints.initial_state = NormalState;
@@ -556,9 +548,9 @@ TkWmMapWindow(winPtr)
Tcl_DStringFree(&ds);
}
- if (wmPtr->master != None) {
+ if (wmPtr->masterPtr != NULL) {
XSetTransientForHint(winPtr->display, wmPtr->wrapperPtr->window,
- wmPtr->master);
+ wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window);
}
wmPtr->flags |= WM_UPDATE_SIZE_HINTS;
@@ -708,9 +700,6 @@ TkWmDeadWindow(winPtr)
if (wmPtr->leaderName != NULL) {
ckfree(wmPtr->leaderName);
}
- if (wmPtr->masterWindowName != NULL) {
- ckfree(wmPtr->masterWindowName);
- }
if (wmPtr->icon != NULL) {
wmPtr2 = ((TkWindow *) wmPtr->icon)->wmInfoPtr;
wmPtr2->iconFor = NULL;
@@ -1326,7 +1315,7 @@ Tk_WmCmd(clientData, interp, argc, argv)
"\": override-redirect flag is set", (char *) NULL);
return TCL_ERROR;
}
- if (wmPtr->master != None) {
+ if (wmPtr->masterPtr != NULL) {
Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName,
"\": it is a transient", (char *) NULL);
return TCL_ERROR;
@@ -1901,7 +1890,7 @@ Tk_WmCmd(clientData, interp, argc, argv)
(char *) NULL);
return TCL_ERROR;
}
- if (wmPtr->master != None) {
+ if (wmPtr->masterPtr != NULL) {
Tcl_AppendResult(interp, "can't iconify \"",
winPtr->pathName,
"\": it is a transient", (char *) NULL);
@@ -1974,7 +1963,7 @@ Tk_WmCmd(clientData, interp, argc, argv)
}
} else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0)
&& (length >= 3)) {
- Tk_Window master;
+ TkWindow *masterPtr = wmPtr->masterPtr;
WmInfo *wmPtr2;
if ((argc != 3) && (argc != 4)) {
@@ -1983,30 +1972,26 @@ Tk_WmCmd(clientData, interp, argc, argv)
return TCL_ERROR;
}
if (argc == 3) {
- if (wmPtr->master != None) {
- Tcl_SetResult(interp, wmPtr->masterWindowName, TCL_STATIC);
+ if (masterPtr != NULL) {
+ Tcl_SetResult(interp, masterPtr->pathName, TCL_STATIC);
}
return TCL_OK;
}
if (argv[3][0] == '\0') {
- wmPtr->master = None;
- if (wmPtr->masterWindowName != NULL) {
- ckfree(wmPtr->masterWindowName);
- }
- wmPtr->masterWindowName = NULL;
+ wmPtr->masterPtr = NULL;
} else {
- master = Tk_NameToWindow(interp, argv[3], tkwin);
- if (master == NULL) {
+ masterPtr = (TkWindow *) Tk_NameToWindow(interp, argv[3], tkwin);
+ if (masterPtr == NULL) {
return TCL_ERROR;
}
- while (!Tk_IsTopLevel(master)) {
+ while (!Tk_IsTopLevel(masterPtr)) {
/*
* Ensure that the master window is actually a Tk toplevel.
*/
- master = Tk_Parent(master);
+ masterPtr = masterPtr->parentPtr;
}
- Tk_MakeWindowExist(master);
+ Tk_MakeWindowExist((Tk_Window) masterPtr);
if (wmPtr->iconFor != NULL) {
Tcl_AppendResult(interp, "can't make \"", argv[2],
@@ -2016,7 +2001,7 @@ Tk_WmCmd(clientData, interp, argc, argv)
return TCL_ERROR;
}
- wmPtr2 = ((TkWindow *) master)->wmInfoPtr;
+ wmPtr2 = masterPtr->wmInfoPtr;
if (wmPtr2->wrapperPtr == NULL) {
CreateWrapper(wmPtr2);
}
@@ -2029,16 +2014,13 @@ Tk_WmCmd(clientData, interp, argc, argv)
return TCL_ERROR;
}
- wmPtr->master = Tk_WindowId(wmPtr2->wrapperPtr);
- if (wmPtr->masterWindowName != NULL) {
- ckfree((char *) wmPtr->masterWindowName);
- }
- wmPtr->masterWindowName = ckalloc((unsigned) (strlen(argv[3])+1));
- strcpy(wmPtr->masterWindowName, argv[3]);
+ wmPtr->masterPtr = masterPtr;
}
if (!(wmPtr->flags & WM_NEVER_MAPPED)) {
+ Window xwin = (wmPtr->masterPtr == NULL) ? None :
+ wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window;
XSetTransientForHint(winPtr->display, wmPtr->wrapperPtr->window,
- wmPtr->master);
+ xwin);
}
} else if ((c == 'w') && (strncmp(argv[1], "withdraw", length) == 0)
&& (length >= 2)) {