From: <co...@us...> - 2003-11-18 03:29:43
|
Update of /cvsroot/interfacewm/interfacewm In directory sc8-pr-cvs1:/tmp/cvs-serv14453 Modified Files: IWMClient.h IWMClient.m IWMCoreUtilities.m IWMIcon.m IWMTitlebar.h IWMTitlebar.m IWMWindow.h IWMWindow.m IWMWindowManager.m IWMWindowManager+Event.m Log Message: various updates Index: IWMClient.h =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMClient.h,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** IWMClient.h 17 Nov 2003 06:08:58 -0000 1.18 --- IWMClient.h 18 Nov 2003 03:29:37 -0000 1.19 *************** *** 80,83 **** --- 80,89 ---- unsigned int gnustep : 1; } state; + + struct { + unsigned int app : 1; + unsigned int menu : 1; + unsigned int dock : 1; + } gnustep; @private *************** *** 183,193 **** /*! - * @method setFrame:display: - * @discussion Sets the size and origin of the window. - * @param aRect An NSRect structure - */ - - (void)setFrame:(NSRect)aRect; - - /*! * @method resize: * @discussion Resizes a client. If <i>resizeWidth</i> is <b>YES</b>, then --- 189,192 ---- *************** *** 279,282 **** --- 278,284 ---- - (void)configure; + - (void)configureRequest:(XConfigureRequestEvent *)event; + - (void)configureNotify; + - (void)raise; - (void)redraw; *************** *** 307,311 **** - (int)screenNumber; ! - (void)moveToScreenNumber:(int)aScreen; - (Window)transient; --- 309,313 ---- - (int)screenNumber; ! - (void)setScreenNumber:(int)aScreen; - (Window)transient; *************** *** 348,351 **** --- 350,354 ---- - (NSRect)frame; + - (void)setFrame:(NSRect)aRect; - (int)width; Index: IWMClient.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMClient.m,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** IWMClient.m 17 Nov 2003 06:19:21 -0000 1.28 --- IWMClient.m 18 Nov 2003 03:29:38 -0000 1.29 *************** *** 228,231 **** --- 228,234 ---- decor.close_button = NO; decor.minimize_button = NO; + + if ([[window xClassInstance] isEqualToString:@"GNUstep"]) + NSLog(@"\n#\n#GNUstep Dock Icon\n#"); } else if (data[0] == GlobalIWM->atoms.net_wm_window_type_toolbar) *************** *** 408,411 **** --- 411,416 ---- - initializeParentWindow { + NSPoint point; + // initialize parent window [self setParent:[[IWMWindow alloc] initAsParentForClient:self]]; *************** *** 416,421 **** // place main window into parent ! [window setInto:parent x:0 y:[self titlebarHeight]]; ! // place resizebar into parent if present if (decor.resizebar) --- 421,428 ---- // place main window into parent ! point.x = 0; ! point.y = [self titlebarHeight]; ! [window setInto:parent point:point]; ! // place resizebar into parent if present if (decor.resizebar) *************** *** 425,429 **** icon = [[IWMIcon alloc] initForClient:self]; ! [self configure]; [self redraw]; --- 432,436 ---- icon = [[IWMIcon alloc] initForClient:self]; ! [self configureNotify]; [self redraw]; *************** *** 531,535 **** [self moveWithMouseUntilButtonRelease]; [self setTopLeftPoint:origin]; ! [self configure]; } --- 538,542 ---- [self moveWithMouseUntilButtonRelease]; [self setTopLeftPoint:origin]; ! [self configureNotify]; } *************** *** 710,716 **** } - (void)unminimize { - // XXX - no true minimization right now... [self unshade]; } --- 717,734 ---- } + // XXX - no true minimization right now... + - (void)minimize + { + IWMTRACE; + + if (!state.shaded) + [self shade]; + else + [self unshade]; + } + + // XXX - no true minimization right now... - (void)unminimize { [self unshade]; } *************** *** 727,730 **** --- 745,796 ---- } + - (void)maximizeHorizontally + { + IWMTRACE; + + if (!state.maximized_horz)// && decor.maximize_button) + { + NSRect frame; + + _cached_size.size.width = [self width]; + + frame.size.width = iwm_display_width([self screen]) - BORDER_WIDTH; + frame.size.height = [self height]; + frame.origin.x = 0; + frame.origin.y = [self y]; + + [self setFrame:frame]; + + state.maximized_horz = YES; + + // XXX - set _NET_WM_STATE_MAXIMIZED_HORZ property + [window updateWindowState]; + } + } + + - (void)maximizeVertically + { + IWMTRACE; + + if (!state.maximized_vert) // && decor.maximize_button) + { + NSRect frame; + + _cached_size.size.height = [self height]; + + frame.size.width = [self width]; + frame.size.height = iwm_display_height([self screen]) - BORDER_WIDTH; + frame.origin.x = [self x]; + frame.origin.y = 0; + + [self setFrame:frame]; + + state.maximized_vert = YES; + + // XXX - set _NET_WM_STATE_MAXIMIZED_VERT property + [window updateWindowState]; + } + } + - (void)unmaximize { *************** *** 752,755 **** --- 818,846 ---- } + - (void)hide + { + IWMTRACE; + + if (!state.hidden) + { + state.hidden = YES; + ignoreUnmap++; + + [parent hide]; + [window hide]; + + if (decor.titlebar) + [titlebar hide]; + + if (decor.resizebar) + [resizebar hide]; + + [self setWMState:IconicState]; + + // XXX - set _NET_WM_STATE_HIDDEN property + [window updateWindowState]; + } + } + - (void)unhide { *************** *** 771,774 **** --- 862,889 ---- } + - (void)shade + { + IWMTRACE; + + if (decor.titlebar && !state.shaded) + { + Atom data[1]; + NSSize size; + + IWMDebug(@"shading client...", nil); + + data[0] = GlobalIWM->atoms.net_wm_state_shaded; + size.width = [self width]; + size.height = [self titlebarHeight]; + + [parent setSize:size]; + state.shaded = YES; + [self setWMState:IconicState]; + + // XXX - set _NET_WM_STATE_SHADED property + [window updateWindowState]; + } + } + - (void)unshade { *************** *** 791,803 **** } - (void)configure { ! [window configure]; if (decor.titlebar && titlebar) ! [titlebar configure]; if (decor.resizebar && resizebar) ! [resizebar configure]; [self redraw]; --- 906,963 ---- } + - (void)focus + { + IWMTRACE; + + // only perform if we're currently unfocused + if (!state.focused) + { + IWMImage *image = nil; + + image = [[[self screen] theme] focusedTitlebarImage]; + [titlebar setImage:image]; + [[resizebar leftGrip] setImage:image]; + [[resizebar rightGrip] setImage:image]; + + [self setWMState:NormalState]; // XXX - change this for EWMH + state.focused = YES; + [window updateWindowState]; + + [window raise]; + [self redraw]; + [window takeFocus]; + } + } + + - (void)unfocus + { + IWMTRACE; + + // only perform if we're currently focused + if (state.focused) + { + IWMImage *image = nil; + + image = [[[self screen] theme] unfocusedTitlebarImage]; + [titlebar setImage:image]; + [[resizebar leftGrip] setImage:image]; + [[resizebar rightGrip] setImage:image]; + + state.focused = NO; + [window updateWindowState]; + + [self redraw]; + } + } + - (void)configure { ! [window configureNotify]; if (decor.titlebar && titlebar) ! [titlebar configureNotify]; if (decor.resizebar && resizebar) ! [resizebar configureNotify]; [self redraw]; *************** *** 806,810 **** - (void)configureRequest:(XConfigureRequestEvent *)event { ! NSRect frame = [self frame]; #if SHAPE --- 966,976 ---- - (void)configureRequest:(XConfigureRequestEvent *)event { ! NSRect frame; ! ! IWMTRACE; ! ! frame = [self frame]; ! ! [self ungravitate]; #if SHAPE *************** *** 816,819 **** --- 982,995 ---- &junk, &ujunk, &ujunk, &junk, &junk, &junk, &ujunk, &ujunk); #endif + + fprintf(stderr, "frame.origin.x = %i\n", (int)frame.origin.x); + fprintf(stderr, "frame.origin.y = %i\n", (int)frame.origin.y); + fprintf(stderr, "frame.size.width = %i\n", (int)frame.size.width); + fprintf(stderr, "frame.size.height = %i\n", (int)frame.size.height); + + fprintf(stderr, "event->x = %i\n", event->x); + fprintf(stderr, "event->y = %i\n", event->y); + fprintf(stderr, "event->width = %i\n", event->width); + fprintf(stderr, "event->height = %i\n", event->height); if (event->value_mask & CWX) *************** *** 830,833 **** --- 1006,1026 ---- [self setFrame:frame]; + [self gravitate]; + [self configureNotify]; + } + + - (void)configureNotify + { + IWMTRACE; + + [window configureNotify]; + + if (decor.titlebar && titlebar) + [titlebar configureNotify]; + + if (decor.resizebar && resizebar) + [resizebar configureNotify]; + + [self redraw]; } *************** *** 943,949 **** if (decor.titlebar) { [titlebar autorelease]; titlebar = [aTitlebar retain]; ! [titlebar setInto:parent x:0 y:0]; } } --- 1136,1147 ---- if (decor.titlebar) { + NSPoint point; + [titlebar autorelease]; titlebar = [aTitlebar retain]; ! ! point.x = 0; ! point.y = 0; ! [titlebar setInto:parent point:point]; } } *************** *** 971,977 **** if (decor.resizebar) { [resizebar autorelease]; resizebar = [aResizebar retain]; ! [resizebar setInto:parent x:GRIP_WIDTH y:([self height] - [self resizebarHeight])]; } } --- 1169,1180 ---- if (decor.resizebar) { + NSPoint point; + [resizebar autorelease]; resizebar = [aResizebar retain]; ! ! point.x = GRIP_WIDTH; ! point.y = [self height] - [self resizebarHeight]; ! [resizebar setInto:parent point:point]; } } *************** *** 991,1011 **** { IWMTRACE; if ((aWindow == window->xWindow) || (aWindow == parent->xWindow) || - (aWindow == titlebar->xWindow) || - (aWindow == ([titlebar closeButton])->xWindow) || - (aWindow == ([titlebar minimizeButton])->xWindow) || - (aWindow == resizebar->xWindow) || - (aWindow == ([resizebar leftGrip])->xWindow) || - (aWindow == ([resizebar rightGrip])->xWindow) || - (aWindow == icon->xWindow) || (aWindow == transient)) { - if (isParent && !(aWindow == parent->xWindow)) - return NO; - return YES; } return NO; --- 1194,1236 ---- { IWMTRACE; + + // if isParent is true, and the window isn't the parent + // xWindow, then return NO immediately + if (isParent && !(aWindow == parent->xWindow)) + return NO; + // check basic windows if ((aWindow == window->xWindow) || (aWindow == parent->xWindow) || (aWindow == transient)) { return YES; } + + // only check if titlebar exists + if (decor.titlebar && titlebar) + { + if ((aWindow == titlebar->xWindow) || + (aWindow == ([titlebar closeButton])->xWindow) || + (aWindow == ([titlebar minimizeButton])->xWindow)) + { + return YES; + } + } + + // only check if resizebar exists + if (decor.resizebar && resizebar) + { + if ((aWindow == resizebar->xWindow) || + (aWindow == ([resizebar leftGrip])->xWindow) || + (aWindow == ([resizebar rightGrip])->xWindow)) + { + return YES; + } + } + + // only check if icon exists + if (icon && aWindow == icon->xWindow) + return YES; return NO; *************** *** 1047,1050 **** --- 1272,1277 ---- - (void)setWMState:(int)aState { + IWMTRACE; + [window setWindowState:aState]; } *************** *** 1111,1114 **** --- 1338,1366 ---- } + - (void)setFrame:(NSRect)aRect + { + int adjustment, windowHeight; + NSSize windowSize; + + IWMTRACE; + + XGrabServer(GlobalDisplay); + + adjustment = BORDER_WIDTH * 2; + windowHeight = (int)aRect.size.height - [self titlebarHeight] - + [self resizebarHeight] - adjustment; + + windowSize.width = (int)aRect.size.width - adjustment; + windowSize.height = windowHeight; + + [parent setSize:aRect.size]; + [window setSize:windowSize]; + [parent setTopLeftPoint:aRect.origin]; + + [self configureNotify]; + + XUngrabServer(GlobalDisplay); + } + - (int)width { *************** *** 1303,1323 **** { return _screenNumber; - #if 0 - unsigned int *data; - int tmp; - - if ((data = (unsigned int*)[window property:GlobalIWM->atoms.net_wm_desktop - type:XA_CARDINAL count:&tmp]) && tmp) - { - IWMDebug(@"Client on screen %i", (int)data[0]); - - return (int)data[0]; - } - - return 0; - #endif } ! - (void)moveToScreenNumber:(int)aScreen { CARD32 data[1]; --- 1555,1561 ---- { return _screenNumber; } ! - (void)setScreenNumber:(int)aScreen { CARD32 data[1]; *************** *** 1336,1339 **** --- 1574,1578 ---- } + // update _NET_WM_DESKTOP property [window setProperty:GlobalIWM->atoms.net_wm_desktop type:XA_CARDINAL format:32 data:(unsigned char *)data elements:1]; *************** *** 1349,1462 **** } - /* - * XXX - no real minimization yet! make shading act like minimize for now - */ - - (void)minimize - { - IWMTRACE; - - if (!state.shaded) - [self shade]; - else - [self unshade]; - } - - - (void)maximizeHorizontally - { - IWMTRACE; - - if (!state.maximized_horz)// && decor.maximize_button) - { - NSRect frame; - - _cached_size.size.width = [self width]; - - frame.size.width = iwm_display_width([self screen]) - BORDER_WIDTH; - frame.size.height = [self height]; - frame.origin.x = 0; - frame.origin.y = [self y]; - - [self setFrame:frame]; - - state.maximized_horz = YES; - - // XXX - set _NET_WM_STATE_MAXIMIZED_HORZ property - [window updateWindowState]; - } - } - - - (void)maximizeVertically - { - IWMTRACE; - - if (!state.maximized_vert) // && decor.maximize_button) - { - NSRect frame; - - _cached_size.size.height = [self height]; - - frame.size.width = [self width]; - frame.size.height = iwm_display_height([self screen]) - BORDER_WIDTH; - frame.origin.x = [self x]; - frame.origin.y = 0; - - [self setFrame:frame]; - - state.maximized_vert = YES; - - // XXX - set _NET_WM_STATE_MAXIMIZED_VERT property - [window updateWindowState]; - } - } - - - (void)hide - { - IWMTRACE; - - if (!state.hidden) - { - state.hidden = YES; - ignoreUnmap++; - - [parent hide]; - [window hide]; - - if (decor.titlebar) - [titlebar hide]; - - if (decor.resizebar) - [resizebar hide]; - - [self setWMState:IconicState]; - - // XXX - set _NET_WM_STATE_HIDDEN property - [window updateWindowState]; - } - } - - - (void)shade - { - IWMTRACE; - - if (decor.titlebar && !state.shaded) - { - Atom data[1]; - NSSize size; - - IWMDebug(@"shading client...", nil); - - data[0] = GlobalIWM->atoms.net_wm_state_shaded; - size.width = [self width]; - size.height = [self titlebarHeight]; - - [parent setSize:size]; - state.shaded = YES; - [self setWMState:IconicState]; - - // XXX - set _NET_WM_STATE_SHADED property - [window updateWindowState]; - } - } - - (void)close { --- 1588,1591 ---- *************** *** 1469,1473 **** [icon hide]; - //if (XGetWMProtocols(GlobalDisplay, [window xWindow], &protocols, &number)) if ((protocols = [window wmProtocols:&number])) { --- 1598,1601 ---- *************** *** 1489,1492 **** --- 1617,1623 ---- - (void)display { + + IWMTRACE; + if (state.shaded) [self unshade]; *************** *** 1509,1557 **** } - - (void)focus - { - IWMTRACE; - - // only perform if we're currently unfocused - if (!state.focused) - { - IWMImage *image = nil; - - image = [[[self screen] theme] focusedTitlebarImage]; - [titlebar setImage:image]; - [[resizebar leftGrip] setImage:image]; - [[resizebar rightGrip] setImage:image]; - - [self setWMState:NormalState]; // XXX - change this for EWMH - state.focused = YES; - [window updateWindowState]; - - [window raise]; - [self redraw]; - [window takeFocus]; - } - } - - - (void)unfocus - { - IWMTRACE; - - // only perform if we're currently focused - if (state.focused) - { - IWMImage *image = nil; - - image = [[[self screen] theme] unfocusedTitlebarImage]; - [titlebar setImage:image]; - [[resizebar leftGrip] setImage:image]; - [[resizebar rightGrip] setImage:image]; - - state.focused = NO; - [window updateWindowState]; - - [self redraw]; - } - } - - (BOOL)modal { --- 1640,1643 ---- *************** *** 1607,1611 **** [parent setTopLeftPoint:aPoint]; [self raise]; ! [self configure]; [self redraw]; } --- 1693,1697 ---- [parent setTopLeftPoint:aPoint]; [self raise]; ! [self configureNotify]; [self redraw]; } *************** *** 1619,1623 **** { NSSize windowSize; ! windowSize.height = (int)aSize.height - [self titlebarHeight] - [self resizebarHeight]; windowSize.width = aSize.width; --- 1705,1711 ---- { NSSize windowSize; ! ! windowSize.height = (int)aSize.height - [self titlebarHeight] - ! [self resizebarHeight]; windowSize.width = aSize.width; *************** *** 1625,1654 **** [window setSize:windowSize]; ! [self configure]; } XUngrabServer(GlobalDisplay); } ! - (void)setFrame:(NSRect)aRect ! { ! IWMTRACE; ! XGrabServer(GlobalDisplay); ! { ! int adjustment = BORDER_WIDTH * 2; ! int windowHeight = (int)aRect.size.height - [self titlebarHeight] - ! [self resizebarHeight] - adjustment; ! NSSize windowSize; ! ! windowSize.width = (int)aRect.size.width - adjustment; ! windowSize.height = windowHeight; ! ! [parent setSize:aRect.size]; ! [window setSize:windowSize]; ! [parent setTopLeftPoint:aRect.origin]; ! ! [self configure]; ! } ! XUngrabServer(GlobalDisplay); ! } @end --- 1713,1722 ---- [window setSize:windowSize]; ! [self configureNotify]; } XUngrabServer(GlobalDisplay); } ! @end Index: IWMCoreUtilities.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMCoreUtilities.m,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** IWMCoreUtilities.m 5 Nov 2003 05:19:55 -0000 1.14 --- IWMCoreUtilities.m 18 Nov 2003 03:29:38 -0000 1.15 *************** *** 361,364 **** --- 361,366 ---- return atom[0]; } + + fprintf(stderr, "---> Window has no IWM_WINDOW_TYPE...\n"); return (Atom) NULL; Index: IWMIcon.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMIcon.m,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** IWMIcon.m 17 Nov 2003 03:51:10 -0000 1.3 --- IWMIcon.m 18 Nov 2003 03:29:38 -0000 1.4 *************** *** 47,51 **** [self setWindowType:GlobalIWM->atoms.iwm_window_type_icon]; ! [super configure]; [super unhide]; [super raise]; --- 47,51 ---- [self setWindowType:GlobalIWM->atoms.iwm_window_type_icon]; ! [super configureNotify]; [super unhide]; [super raise]; Index: IWMTitlebar.h =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMTitlebar.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** IWMTitlebar.h 17 Nov 2003 03:51:10 -0000 1.8 --- IWMTitlebar.h 18 Nov 2003 03:29:38 -0000 1.9 *************** *** 79,83 **** - (void)unhide; ! - (void)configure; /*==========================================================================* --- 79,83 ---- - (void)unhide; ! - (void)configureNotify; /*==========================================================================* Index: IWMTitlebar.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMTitlebar.m,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** IWMTitlebar.m 17 Nov 2003 03:51:10 -0000 1.12 --- IWMTitlebar.m 18 Nov 2003 03:29:38 -0000 1.13 *************** *** 196,202 **** } ! - (void)configure { ! [super configure]; // redraw the name of the client --- 196,202 ---- } ! - (void)configureNotify { ! [super configureNotify]; // redraw the name of the client Index: IWMWindow.h =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMWindow.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** IWMWindow.h 6 Nov 2003 23:40:57 -0000 1.12 --- IWMWindow.h 18 Nov 2003 03:29:38 -0000 1.13 *************** *** 123,140 **** /*! ! * @method setFrame:display: ! * @discussion Sets the size and origin of the window. ! * @param aRect An NSRect structure ! */ ! - (void)setFrame:(NSRect)aRect; ! ! /*! ! * @method setInto:x:y: ! * @discussion Reparents the window into aParent at the specified coordinates ! * @param aParent Parent window ! * @param xValue The X coordinate of placement within aParent ! * @param yValue The Y coordinate of placement within aParent */ ! - (void)setInto:(IWMWindow *)aParent x:(int)xValue y:(int)yValue; /*! --- 123,130 ---- /*! ! * @method setInto:point: ! * @discussion Reparents the window into aParent at the specified point */ ! - (void)setInto:(IWMWindow *)aParent point:(NSPoint)aPoint; /*! *************** *** 185,188 **** --- 175,180 ---- - (NSRect)frame; + - (void)setFrame:(NSRect)aRect; + - (int)width; - (int)height; *************** *** 190,194 **** - (int)y; ! - (void)configure; - (int)mapState; - (Window)transient; --- 182,187 ---- - (int)y; ! - (void)configureNotify; ! - (int)mapState; - (Window)transient; Index: IWMWindow.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMWindow.m,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** IWMWindow.m 17 Nov 2003 03:51:10 -0000 1.17 --- IWMWindow.m 18 Nov 2003 03:29:38 -0000 1.18 *************** *** 89,95 **** // create a window as a child of aParent ! window = XCreateWindow(GlobalDisplay, [aParent xWindow], (int)aFrame.origin.x, ! (int)aFrame.origin.y, (int)aFrame.size.width, (int)aFrame.size.height, ! BORDER_WIDTH, [screen depth], CopyFromParent, visual, mask, &attr); return [self initWithWindow:window client:[aParent client] pixmap:0 --- 89,96 ---- // create a window as a child of aParent ! window = XCreateWindow(GlobalDisplay, [aParent xWindow], ! (int)aFrame.origin.x, (int)aFrame.origin.y, (int)aFrame.size.width, ! (int)aFrame.size.height, BORDER_WIDTH, [screen depth], ! CopyFromParent, visual, mask, &attr); return [self initWithWindow:window client:[aParent client] pixmap:0 *************** *** 203,216 **** } ! - (void)setFrame:(NSRect)aRect ! { ! XMoveResizeWindow(GlobalDisplay, xWindow, (int)aRect.origin.x, (int)aRect.origin.y, ! (int)aRect.size.width, (int)aRect.size.height); ! } ! ! - (void)setInto:(IWMWindow *)aParent x:(int)xValue y:(int)yValue { XReparentWindow(GlobalDisplay, xWindow, [aParent xWindow], ! xValue, yValue); } --- 204,211 ---- } ! - (void)setInto:(IWMWindow *)aParent point:(NSPoint)aPoint { XReparentWindow(GlobalDisplay, xWindow, [aParent xWindow], ! (int)aPoint.x, (int)aPoint.y); } *************** *** 404,415 **** XGetWindowAttributes(GlobalDisplay, xWindow, &attr); ! rect.origin.x = attr.x; ! rect.origin.y = attr.y; ! rect.size.width = attr.width; ! rect.size.height = attr.height; return rect; } - (int)width { --- 399,416 ---- XGetWindowAttributes(GlobalDisplay, xWindow, &attr); ! rect.origin.x = attr.x; ! rect.origin.y = attr.y; ! rect.size.width = attr.width; ! rect.size.height = attr.height; return rect; } + - (void)setFrame:(NSRect)aRect + { + XMoveResizeWindow(GlobalDisplay, xWindow, (int)aRect.origin.x, + (int)aRect.origin.y, (int)aRect.size.width, (int)aRect.size.height); + } + - (int)width { *************** *** 432,436 **** } ! - (void)configure { XEvent event; --- 433,437 ---- } ! - (void)configureNotify { XEvent event; Index: IWMWindowManager.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMWindowManager.m,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** IWMWindowManager.m 5 Nov 2003 02:14:55 -0000 1.24 --- IWMWindowManager.m 18 Nov 2003 03:29:38 -0000 1.25 *************** *** 539,571 **** } ! /* ! * remap actual clients present before IWM was started ! */ for (i = 0; i < nchildren; i++) { if (children[i] && iwm_mapped_not_override(self, children[i])) { ! #ifdef NEW_HANDLER ! XEvent ev; ! ! XUnmapWindow(GlobalDisplay, children[i]); ! ! ev.xmaprequest.window = children[i]; ! [self handleMapRequest: &ev]; ! #else ! IWMClient *client = nil; ! client = [[IWMClient alloc] initWithWindow: children[i] ! onScreen: currentScreenNumber]; ! [self addClient:client]; ! [self setHeadClient:client]; ! #endif } } ! if (nchildren > 0) ! XFree((caddr_t) children); ! return; } --- 539,561 ---- } ! // remap client present before IWM was started for (i = 0; i < nchildren; i++) { if (children[i] && iwm_mapped_not_override(self, children[i])) { ! XEvent event; ! XUnmapWindow(GlobalDisplay, children[i]); ! ! event.xmaprequest.window = children[i]; ! ! [self handleMapRequestEvent:&event]; } } ! if (0 < nchildren) ! XFree((caddr_t)children); ! return (void)0x0; } *************** *** 584,588 **** pid_t pid; ! IWMDebug(@"[IWMWindowManager] -> runCommand: %@", command); pid = fork(); --- 574,580 ---- pid_t pid; ! IWMTRACE; ! ! IWMDebug(@"command: %@", command); pid = fork(); *************** *** 686,690 **** // XXX - obtain _NET_CLIENT_LIST ! windows = (Window *)[[self rootWindow] property:atoms.net_client_list type:XA_WINDOW count:&count]; --- 678,682 ---- // XXX - obtain _NET_CLIENT_LIST ! windows = (Window *)[[self rootWindow] property:atoms.net_client_list type:XA_WINDOW count:&count]; *************** *** 720,731 **** count = [clientArray count]; ! ! if (count > 0) { ! for (i = 0; i < count; i++) ! { ! client = [clientArray objectAtIndex:i]; ! [names addObject:[client name]]; ! } } --- 712,719 ---- count = [clientArray count]; ! for (i = 0; i < count; i++) { ! client = [clientArray objectAtIndex:i]; ! [names addObject:[client name]]; } *************** *** 931,934 **** --- 919,923 ---- - (void)saveDefaults { + #if 0 NSUserDefaults *defaults; //NSMutableDictionary *newDefaults; *************** *** 942,945 **** --- 931,935 ---- return (void)0x0; + #endif } *************** *** 948,952 **** [clientArray addObject:aClient]; [self setHeadClient:aClient]; - [self updateClientWindowList]; } --- 938,941 ---- *************** *** 1027,1031 **** [aClient display]; [aClient raise]; ! [aClient configure]; [aClient focus]; --- 1016,1020 ---- [aClient display]; [aClient raise]; ! [aClient configureNotify]; [aClient focus]; Index: IWMWindowManager+Event.m =================================================================== RCS file: /cvsroot/interfacewm/interfacewm/IWMWindowManager+Event.m,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** IWMWindowManager+Event.m 17 Nov 2003 06:08:58 -0000 1.12 --- IWMWindowManager+Event.m 18 Nov 2003 03:29:38 -0000 1.13 *************** *** 255,263 **** case FocusIn: - //[self handleFocusInEvent:event]; - break; - case FocusOut: - //[self handleFocusOutEvent:event]; break; --- 255,259 ---- *************** *** 323,331 **** case CirculateNotify: - //[self handleCirculateNotifyEvent:event]; - break; - case CirculateRequest: - //[self handleCirculateRequestEvent:event]; break; --- 319,323 ---- *************** *** 335,347 **** case SelectionClear: - //[self handleSelectionClearEvent:event]; - break; - case SelectionRequest: - //[self handleSelectionRequestEvent:event]; - break; - case SelectionNotify: - //[self handleSelectionNotifyEvent:event]; break; --- 327,332 ---- *************** *** 381,385 **** - (void)handleKeyPressEvent:(XEvent *)anEvent { - //if (!(client = [self clientWithWindow:event->window isParent:YES])) } --- 366,369 ---- *************** *** 391,401 **** { XButtonEvent *event = &anEvent->xbutton; ! Atom type = [self typeForWindow:event->window]; ! IWMClient *client = [self clientWithWindow:event->window isParent:NO]; int double_click = NO; - IWMTRACE; ! fprintf(stderr, "[IWMWindowManager] -> handleButtonEvent: %i\n", (int)event->window); ! fprintf(stderr, "Window type: %s\n", XGetAtomName(GlobalDisplay,type)); // set double_click flag if time between clicks doesn't exceed limit & both --- 375,386 ---- { XButtonEvent *event = &anEvent->xbutton; ! Atom type; ! IWMClient *client = nil; int double_click = NO; ! IWMTRACE; ! ! type = [self typeForWindow:event->window]; ! client = [self clientWithWindow:event->window isParent:NO]; // set double_click flag if time between clicks doesn't exceed limit & both *************** *** 404,414 **** (event->window == GlobalLastButtonClickWindow)) { - fprintf(stderr, "---> DOUBLE CLICK\n"); double_click = YES; } - fprintf(stderr, "-> Last click: %i\n", (int)GlobalLastButtonClick); - fprintf(stderr, "-> This click: %i\n", (int)event->time); - // now we can update GlobalLastButtonClick & GlobalLastButtonClickWindow // with the current event data --- 389,395 ---- *************** *** 425,428 **** --- 406,410 ---- [self cacheEventTime: &ev]; } + GlobalLastButtonClickWindow = event->window; *************** *** 469,472 **** --- 451,455 ---- return (void)0x0; } + // client titlebar else if (type == atoms.iwm_window_type_titlebar) *************** *** 484,487 **** --- 467,471 ---- } } + // client resizebar else if (type == atoms.iwm_window_type_resizebar) *************** *** 489,492 **** --- 473,477 ---- [client resize:NO]; } + // client resizebar grip else if ((type == atoms.iwm_window_type_left_grip) || *************** *** 496,499 **** --- 481,485 ---- [client resize:YES]; } + // close button else if (type == atoms.iwm_window_type_close_button) *************** *** 502,505 **** --- 488,492 ---- [self removeClient:client]; } + // minimize button else if (type == atoms.iwm_window_type_minimize_button) *************** *** 507,510 **** --- 494,498 ---- [client minimize]; } + // maximize button else if (type == atoms.iwm_window_type_maximize_button) *************** *** 512,515 **** --- 500,504 ---- [client maximize]; } + // client icon else if (type == atoms.iwm_window_type_icon) *************** *** 532,535 **** --- 521,525 ---- [self setHeadClient:client]; } + // unknown window type else if (type == atoms.iwm_window_type_unknown) *************** *** 594,602 **** if (IconicState == action) { ! //[client minimize]; } if (NormalState == action) { ! //[client unminimize]; } } --- 584,592 ---- if (IconicState == action) { ! [client minimize]; } if (NormalState == action) { ! [client display]; } } *************** *** 605,609 **** else if (event->message_type == atoms.net_close_window) { - NSLog(@"*** _NET_CLOSE_WINDOW message..."); [self removeClient:client]; } --- 595,598 ---- *************** *** 616,620 **** gravity = event->data.l[0]; // XXX not used right now - frame.origin.x = event->data.l[1]; frame.origin.y = event->data.l[2]; --- 605,608 ---- *************** *** 628,636 **** else if (event->message_type == atoms.net_wm_desktop) { ! int screen; ! ! screen = event->data.l[0]; ! ! [client moveToScreenNumber:screen]; } --- 616,620 ---- else if (event->message_type == atoms.net_wm_desktop) { ! [client setScreenNumber:event->data.l[0]]; } *************** *** 666,672 **** else if (event->message_type == atoms.net_number_of_desktops) { ! int number; ! number = event->data.l[0]; // XXX currently unimplemented --- 650,656 ---- else if (event->message_type == atoms.net_number_of_desktops) { ! int newNumber; ! newNumber = event->data.l[0]; // XXX currently unimplemented *************** *** 774,778 **** - (void)handleConfigureNotifyEvent:(XEvent *)anEvent { - return (void)0x0; } --- 758,761 ---- *************** *** 787,837 **** if (!(client = [self clientWithWindow:event->window isParent:NO])) { ! client = [self headClient]; } if (client) { ! NSRect frame = [client frame]; ! ! [client ungravitate]; ! ! if (event->value_mask & CWX) ! frame.origin.x = event->x; ! ! if (event->value_mask & CWY) ! frame.origin.y = event->y; ! ! if (event->value_mask & CWWidth) ! frame.size.width = event->width; ! ! if (event->value_mask & CWHeight) ! frame.size.height = event->height; ! ! [client setFrame:frame]; ! ! [client gravitate]; ! ! #if 0 ! changes.x = [client x]; ! changes.y = [client y]; ! changes.width = [client width]; ! changes.height = [client height]; ! changes.border_width = [client borderWidth]; ! changes.sibling = event->above; ! changes.stack_mode = event->detail; ! XConfigureWindow(GlobalDisplay, [[client parent] xWindow], ! event->value_mask, &changes); ! #endif } - - changes.x = (client ? 0 : event->x); - changes.y = (client ? [client titlebarHeight] : event->y); - changes.width = event->width; - changes.height = event->height; - changes.sibling = event->above; - changes.stack_mode = event->detail; - - XConfigureWindow(GlobalDisplay, event->window, event->value_mask, &changes); } --- 770,792 ---- if (!(client = [self clientWithWindow:event->window isParent:NO])) { ! //client = [self headClient]; } if (client) { ! [client configureRequest:event]; ! } ! else ! { ! changes.x = event->x; ! changes.y = event->y; ! changes.width = event->width; ! changes.height = event->height; ! changes.sibling = event->above; ! changes.stack_mode = event->detail; ! XConfigureWindow(GlobalDisplay, event->window, event->value_mask, ! &changes); } } *************** *** 846,850 **** { XGrabButton(GlobalDisplay, AnyButton, Mod1Mask, ! [[client parent] xWindow], False, IWM_EVENT_MASK_BUTTON, GrabModeAsync, GrabModeAsync, None, None); --- 801,805 ---- { XGrabButton(GlobalDisplay, AnyButton, Mod1Mask, ! ([client parent])->xWindow, False, IWM_EVENT_MASK_BUTTON, GrabModeAsync, GrabModeAsync, None, None); *************** *** 860,866 **** } - /* - * XXX - b0rken - */ - (void)handleExposeEvent:(XEvent *)anEvent { --- 815,818 ---- *************** *** 868,882 **** XExposeEvent *event = &anEvent->xexpose; ! if (event->count != 0) ! return (void)0x0; ! else { ! IWMClient *client = nil; ! ! client = [self clientWithWindow:event->window isParent:YES]; ! ! if (client) ! [client redraw]; } } --- 820,828 ---- XExposeEvent *event = &anEvent->xexpose; + IWMClient *client = [self clientWithWindow:event->window isParent:YES]; ! if (client && (0 == event->count)) { ! [client redraw]; } } *************** *** 897,913 **** else { client = [[IWMClient alloc] initWithWindow:event->window ! onScreen:_currentScreen]; [self addClient:client]; } ! XGrabServer(GlobalDisplay); ! { ! XMapWindow(GlobalDisplay, event->window); ! XRaiseWindow(GlobalDisplay, event->window); ! ! XSync(GlobalDisplay, 0); ! } ! XUngrabServer(GlobalDisplay); } --- 843,861 ---- else { + char *name; + + XFetchName(GlobalDisplay, event->window, &name); + + NSLog(@"New client: %s", name); + + // initialize client with window client = [[IWMClient alloc] initWithWindow:event->window ! onScreen:_currentScreen]; ! ! // add to client array, making new head client [self addClient:client]; } ! XSync(GlobalDisplay, False); } *************** *** 915,919 **** { IWMTRACE; ! XMapEvent *event = &anEvent->xmap; IWMClient *client = nil; --- 863,867 ---- { IWMTRACE; ! XMapEvent *event = &anEvent->xmap; IWMClient *client = nil; *************** *** 921,926 **** if ((client = [self clientWithWindow:event->window isParent:NO])) { ! if (([client window])->xWindow == event->event) { XGrabServer(GlobalDisplay); [client display]; --- 869,875 ---- if ((client = [self clientWithWindow:event->window isParent:NO])) { ! if (client && [client window] && (([client window])->xWindow == event->event)) { + NSLog(@"handleMapNotify for client: %@", client); XGrabServer(GlobalDisplay); [client display]; *************** *** 940,946 **** IWMTRACE; ! client = [self clientWithWindow:event->window isParent:NO]; ! ! if (client) { switch (event->atom){ --- 889,893 ---- IWMTRACE; ! if ((client = [self clientWithWindow:event->window isParent:NO])) { switch (event->atom){ *************** *** 996,1000 **** IWMTRACE; ! if ((client = [self clientWithWindow:event->window isParent:NO])) { NSLog(@"*** destroy event..."); --- 943,947 ---- IWMTRACE; ! if ((client = [self clientWithWindow:event->window isParent:YES])) { NSLog(@"*** destroy event..."); *************** *** 1007,1090 **** - (void)handleUnmapNotifyEvent:(XEvent *)anEvent { ! // ! // Quick-hack fix to unmap windows, note that this hack doesn't adhere ! // to the ICCCM (yet ;-) ! // ! ! XUnmapEvent *event = &anEvent->xunmap; ! ! XGrabServer(GlobalDisplay); ! { ! XEvent dummy; ! Window dumwin; ! int dstx, dsty; ! IWMScreen *screen; ! if(XCheckTypedWindowEvent(GlobalDisplay, event->window, DestroyNotify, &dummy)) ! { ! dummy.type = event->type; ! dummy.xdestroywindow.window = event->window; ! ! [self handleDestroyNotifyEvent:&dummy]; ! XUngrabServer(GlobalDisplay); ! ! return; ! } ! screen = [self currentScreen]; ! if(XTranslateCoordinates(GlobalDisplay, event->window, screen->rootXWindow, ! 0, 0, &dstx, &dsty, &dumwin)) { ! XEvent dummy; ! Bool reparented; ! IWMClient *client = [self clientWithWindow: event->window isParent: NO]; ! ! reparented = XCheckTypedWindowEvent(GlobalDisplay, event->window, ReparentNotify, &dummy); ! ! [client setWMState: WithdrawnState]; ! ! if( reparented ) ! { ! if( [client borderWidth] ) ! XSetWindowBorderWidth(GlobalDisplay, event->window, [client borderWidth]); ! } ! else ! { ! Window junk; ! XWindowChanges xwc; ! unsigned int bw, mask; ! int x, y, w, h, d; ! if( XGetGeometry(GlobalDisplay, event->window, &junk, ! &xwc.x, &xwc.y, &w, &h, &bw, &d) ) { ! XTranslateCoordinates(GlobalDisplay, event->window, screen->rootXWindow, ! xwc.x, xwc.y, &x, &y, &junk); ! xwc.x = x; ! xwc.y = y; ! xwc.border_width = [client borderWidth]; ! mask = (CWX | CWY | CWBorderWidth); ! ! XReparentWindow(GlobalDisplay, event->window, screen->rootXWindow, xwc.x, xwc.y); ! ! XConfigureWindow(GlobalDisplay, event->window, mask, &xwc); ! XSync(GlobalDisplay, 0); } - } - - XRemoveFromSaveSet(GlobalDisplay, event->window); - XSelectInput(GlobalDisplay, event->window, NoEventMask); - - dummy.type = event->type; - dummy.xdestroywindow.window = event->window; - - [self handleDestroyNotifyEvent:&dummy]; } ! } ! XUngrabServer(GlobalDisplay); ! ! XFlush(GlobalDisplay); ! #if 0 IWMClient *client = nil; --- 954,1043 ---- - (void)handleUnmapNotifyEvent:(XEvent *)anEvent { ! // ! // Quick-hack fix to unmap windows, note that this hack doesn't adhere ! // to the ICCCM (yet ;-) ! // ! XUnmapEvent *event = &anEvent->xunmap; ! IWMTRACE; ! XGrabServer(GlobalDisplay); { ! XEvent dummy; ! Window dumwin; ! int dstx, dsty; ! IWMScreen *screen; ! if(XCheckTypedWindowEvent(GlobalDisplay, event->window, DestroyNotify, ! &dummy)) { ! dummy.type = event->type; ! dummy.xdestroywindow.window = event->window; ! ! [self handleDestroyNotifyEvent:&dummy]; ! XUngrabServer(GlobalDisplay); ! ! return; ! } ! ! screen = [self currentScreen]; ! ! if(XTranslateCoordinates(GlobalDisplay, event->window, screen->rootXWindow, ! 0, 0, &dstx, &dsty, &dumwin)) ! { ! XEvent dummy; ! Bool reparented; ! IWMClient *client = [self clientWithWindow: event->window isParent: NO]; ! ! reparented = XCheckTypedWindowEvent(GlobalDisplay, event->window, ! ReparentNotify, &dummy); ! ! [client setWMState: WithdrawnState]; ! ! if( reparented ) ! { ! if( [client borderWidth] ) ! XSetWindowBorderWidth(GlobalDisplay, event->window, ! [client borderWidth]); ! } ! else ! { ! Window junk; ! XWindowChanges xwc; ! unsigned int bw, mask; ! int x, y, w, h, d; ! ! if( XGetGeometry(GlobalDisplay, event->window, &junk, ! &xwc.x, &xwc.y, &w, &h, &bw, &d) ) ! { ! XTranslateCoordinates(GlobalDisplay, event->window, ! screen->rootXWindow, xwc.x, xwc.y, &x, &y, &junk); ! xwc.x = x; ! xwc.y = y; ! xwc.border_width = [client borderWidth]; ! mask = (CWX | CWY | CWBorderWidth); ! ! XReparentWindow(GlobalDisplay, event->window, screen->rootXWindow, ! xwc.x, xwc.y); ! ! XConfigureWindow(GlobalDisplay, event->window, mask, &xwc); ! XSync(GlobalDisplay, 0); ! } ! } ! ! XRemoveFromSaveSet(GlobalDisplay, event->window); ! XSelectInput(GlobalDisplay, event->window, NoEventMask); ! ! dummy.type = event->type; ! dummy.xdestroywindow.window = event->window; ! ! [self handleDestroyNotifyEvent:&dummy]; } } ! XUngrabServer(GlobalDisplay); ! ! XFlush(GlobalDisplay); ! #if 0 IWMClient *client = nil; *************** *** 1113,1116 **** --- 1066,1070 ---- XVisibilityEvent *event = &anEvent->xvisibility; IWMClient *client = nil; + IWMTRACE; *************** *** 1124,1128 **** - (void)handleShapeChangeEvent:(XEvent *)anEvent { - XShapeEvent *event = (XShapeEvent *)anEvent; } #endif /* SHAPE */ --- 1078,1081 ---- |